text: if (typeof exports === 'object') {
  
      var joint = {
          util: require('../src/core').util,
          shapes: {
              basic: require('./joint.shapes.basic')
          },
          dia: {
              ElementView: require('../src/joint.dia.element').ElementView,
              Link: require('../src/joint.dia.link').Link
          }
      };
      var _ = require('lodash');
  }
  
  joint.shapes.devs = {};
  
  joint.shapes.devs.Model = joint.shapes.basic.Generic.extend(_.extend({}, joint.shapes.basic.PortsModelInterface, {
  
      markup: '<g class="rotatable"><g class="scalable"><rect/></g><text class="label"/><g class="inPorts"/><g class="outPorts"/></g>',
      portMarkup: '<g class="port<%= id %>"><circle/><text/></g>',
  
      defaults: joint.util.deepSupplement({
  
          type: 'devs.Model',
          size: { width: 1, height: 1 },
          
          inPorts: [],
          outPorts: [],
  
          attrs: {
              '.': { magnet: false },
              rect: {
                  width: 150, height: 250,
                  stroke: 'black'
              },
              circle: {
                  r: 10,
                  magnet: true,
                  stroke: 'black'
              },
              text: {
                  fill: 'black',
                  'pointer-events': 'none'
              },
              '.label': { text: 'Model', 'ref-x': .3, 'ref-y': .2 },
              '.inPorts text': { x:-15, dy: 4, 'text-anchor': 'end' },
              '.outPorts text':{ x: 15, dy: 4 }
          }
  
      }, joint.shapes.basic.Generic.prototype.defaults),
  
      getPortAttrs: function(portName, index, total, selector, type) {
  
          var attrs = {};
          
          var portClass = 'port' + index;
          var portSelector = selector + '>.' + portClass;
          var portTextSelector = portSelector + '>text';
          var portCircleSelector = portSelector + '>circle';
  
          attrs[portTextSelector] = { text: portName };
          attrs[portCircleSelector] = { port: { id: portName || _.uniqueId(type) , type: type } };
          attrs[portSelector] = { ref: 'rect', 'ref-y': (index + 0.5) * (1 / total) };
          
          if (selector === '.outPorts') { attrs[portSelector]['ref-dx'] = 0; }
  
          return attrs;
      }
  }));
  
  
  joint.shapes.devs.Atomic = joint.shapes.devs.Model.extend({
  
      defaults: joint.util.deepSupplement({
  
          type: 'devs.Atomic',
          size: { width: 80, height: 80 },
          attrs: {
              rect: { fill: 'salmon' },
              '.label': { text: 'Atomic' },
              '.inPorts circle': { fill: 'PaleGreen' },
              '.outPorts circle': { fill: 'Tomato' }
          }
  
      }, joint.shapes.devs.Model.prototype.defaults)
  
  });
  
  joint.shapes.devs.Coupled = joint.shapes.devs.Model.extend({
  
      defaults: joint.util.deepSupplement({
  
          type: 'devs.Coupled',
          size: { width: 200, height: 300 },
          attrs: {
              rect: { fill: 'seaGreen' },
              '.label': { text: 'Coupled' },
              '.inPorts circle': { fill: 'PaleGreen' },
              '.outPorts circle': { fill: 'Tomato' }
          }
  
      }, joint.shapes.devs.Model.prototype.defaults)
  });
  
  joint.shapes.devs.Link = joint.dia.Link.extend({
  
      defaults: {
          type: 'devs.Link',
          attrs: { '.connection' : { 'stroke-width' :  2 }}
      }
  });
  
  joint.shapes.devs.ModelView = joint.dia.ElementView.extend(joint.shapes.basic.PortsViewInterface);
  joint.shapes.devs.AtomicView = joint.shapes.devs.ModelView;
  joint.shapes.devs.CoupledView = joint.shapes.devs.ModelView;
  
  
  if (typeof exports === 'object') {
  
      module.exports = joint.shapes.devs;
  }
  