You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by rl...@apache.org on 2017/06/23 13:28:56 UTC

[01/42] ambari git commit: AMBARI-21324 - Ambari 3.0: Outstanding Services page issues (Ishan Bhatt via rzang)

Repository: ambari
Updated Branches:
  refs/heads/branch-feature-AMBARI-20859 f760516c2 -> fd3220099


http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/templates/main/service/services/yarn.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/services/yarn.hbs b/ambari-web/app/templates/main/service/services/yarn.hbs
index 32aad5d..aa8ee48 100644
--- a/ambari-web/app/templates/main/service/services/yarn.hbs
+++ b/ambari-web/app/templates/main/service/services/yarn.hbs
@@ -17,95 +17,123 @@
 }}
 
 <div class="row">
-{{! left column }}
-<div class="col-md-6">
-  {{view view.dashboardMasterComponentView}}
+  {{! Component Section }}
+  <div class="col-md-12 component-summary">
+    <div class="col-md-2">{{t dashboard.services.hdfs.summary.components}}</div>
+    <div class="col-md-10">
+      {{view view.dashboardMasterComponentView}}
 
-  {{! NodeManagers }}
-  {{#if view.isNodeManagerCreated}}
-    <div {{bindAttr class=":row :component view.nodeManagerComponent.componentName"}}>
-      <div class="col-md-6 summary-label">
-        <a href="#" {{action filterHosts view.nodeManagerComponent}}>{{t dashboard.services.yarn.nodeManagers}}</a>
+      {{! NodeManagers }}
+      {{#if view.isNodeManagerCreated}}
+        <div {{bindAttr class=":row :component :col-md-3 view.nodeManagerComponent.componentName"}}>
+          <div class="summary-value main-info">
+            {{#if App.router.clusterController.isServiceContentFullyLoaded}}
+              {{#view App.ComponentLiveTextView liveComponentsBinding="view.service.nodeManagersStarted" totalComponentsBinding="view.service.nodeManagersTotal" tagName="span"}}
+                {{view.liveComponents}}/{{view.totalComponents}}
+              {{/view}}
+              {{t common.started}}
+            {{else}}
+              {{t common.loading.eclipses}}
+            {{/if}}
+          </div>
+          <div class="summary-label">
+            <a href="#" {{action filterHosts view.nodeManagerComponent}}>{{t dashboard.services.yarn.nodeManagers}}</a>
+          </div>
+        </div>
+      {{/if}}
+      {{! YARN Clients }}
+      <div {{bindAttr class=":row :component :col-md-3 view.yarnClientComponent.componentName"}}>
+        <div class="summary-value main-info">
+          <span>{{view.service.installedClients}} {{t common.installed}} </span>
+        </div>
+        <div class="summary-label">
+          <a {{action filterHosts view.yarnClientComponent}} href="javascript:void(null)">
+            {{pluralize view.service.installedClients singular="t:dashboard.services.yarn.client" plural="t:dashboard.services.yarn.clients"}}
+          </a>
+        </div>
       </div>
-      <div class="col-md-6 summary-value">
-        {{#if App.router.clusterController.isServiceContentFullyLoaded}}
-          {{#view App.ComponentLiveTextView liveComponentsBinding="view.service.nodeManagersStarted" totalComponentsBinding="view.service.nodeManagersTotal" tagName="span"}}
-            {{view.liveComponents}}/{{view.totalComponents}}
-          {{/view}}
-          {{t common.started}}
-        {{else}}
-          {{t common.loading.eclipses}}
-        {{/if}}
+      {{! ResourceManager Uptime }}
+      <div class="row col-md-3 resourcemanager-uptime">
+        <div class="summary-value main-info">{{view.nodeUptime}}</div>
+        <div class="summary-label">{{t dashboard.services.yarn.resourceManager.uptime}}</div>
+      </div>
+      {{! NodeManagers status }}
+      <div class="row col-md-3 nodemanager-status">
+        <div class="summary-value">
+          <div class="main-info">
+            <span {{translateAttr data-original-title="dashboard.services.yarn.nodeManagers.status.tooltip.active"}}
+                    rel="tooltip">
+              {{view._nmActive}} </span> /
+            <span {{translateAttr data-original-title="dashboard.services.yarn.nodeManagers.status.tooltip.lost"}}
+                    rel="tooltip">
+              {{view._nmLost}} </span> /
+            <span {{translateAttr data-original-title="dashboard.services.yarn.nodeManagers.status.tooltip.unhealthy"}}
+                    rel="tooltip">
+              {{view._nmUnhealthy}} </span> /
+            <span {{translateAttr data-original-title="dashboard.services.yarn.nodeManagers.status.tooltip.rebooted"}}
+                    rel="tooltip">
+              {{view._nmRebooted}} </span> /
+            <span {{translateAttr data-original-title="dashboard.services.yarn.nodeManagers.status.tooltip.decommissioned"}}
+                    rel="tooltip">
+              {{view._nmDecom}} </span>
+          </div>
+          <div class="info-desc">
+            <span {{t dashboard.services.yarn.nodeManagers.status.active}} </span> /
+            <span {{t dashboard.services.yarn.nodeManagers.status.lost}} </span> /
+            <span {{t dashboard.services.yarn.nodeManagers.status.unhealthy}} </span> /
+            <span {{t dashboard.services.yarn.nodeManagers.status.rebooted}} </span> /
+            <span {{t dashboard.services.yarn.nodeManagers.status.decommissioned}} </span>
+          </div>
+        </div>
+        <div class="summary-label">{{t dashboard.services.yarn.nodeManagers.status}}</div>
+      </div>
+      {{! ResourceManager Heap }}
+      <div class="row col-md-3 resourcemanager-heap">
+        <div class="summary-value main-info">{{view.nodeHeap}}</div>
+        <div class="summary-label">{{t dashboard.services.resourceManager.nodes.heap}}</div>
       </div>
     </div>
-  {{/if}}
-  {{! NodeManagers status }}
-  <div class="row nodemanager-status">
-    <div class="col-md-6 summary-label">{{t dashboard.services.yarn.nodeManagers.status}}</div>
-    <div class="col-md-6 summary-value">
-      <span {{translateAttr data-original-title="dashboard.services.yarn.nodeManagers.status.tooltip.active"}} rel="tooltip">
-      {{view._nmActive}} {{t dashboard.services.yarn.nodeManagers.status.active}} </span> /
-    <span {{translateAttr data-original-title="dashboard.services.yarn.nodeManagers.status.tooltip.lost"}} rel="tooltip">
-      {{view._nmLost}} {{t dashboard.services.yarn.nodeManagers.status.lost}} </span> /
-    <span {{translateAttr data-original-title="dashboard.services.yarn.nodeManagers.status.tooltip.unhealthy"}} rel="tooltip">
-      {{view._nmUnhealthy}} {{t dashboard.services.yarn.nodeManagers.status.unhealthy}} </span> /
-    <span {{translateAttr data-original-title="dashboard.services.yarn.nodeManagers.status.tooltip.rebooted"}} rel="tooltip">
-      {{view._nmRebooted}} {{t dashboard.services.yarn.nodeManagers.status.rebooted}} </span> /
-    <span {{translateAttr data-original-title="dashboard.services.yarn.nodeManagers.status.tooltip.decommissioned"}} rel="tooltip">
-      {{view._nmDecom}} {{t dashboard.services.yarn.nodeManagers.status.decommissioned}} </span>
-    </div>
-  </div>
-  {{! YARN Clients }}
-  <div {{bindAttr class=":row :component view.yarnClientComponent.componentName"}}>
-    <div class="col-md-6 summary-label">
-      <a {{action filterHosts view.yarnClientComponent}} href="javascript:void(null)">
-        {{pluralize view.service.installedClients singular="t:dashboard.services.yarn.client" plural="t:dashboard.services.yarn.clients"}}
-      </a>
-    </div>
-    <div class="col-md-6 summary-value">
-      <span class="green-live">{{view.service.installedClients}} </span>
-      {{pluralize view.service.installedClients singular="t:dashboard.services.yarn.client" plural="t:dashboard.services.yarn.clients"}} {{t common.installed}}
-    </div>
-  </div>
-  {{! ResourceManager Uptime }}
-  <div class="row resourcemanager-uptime">
-    <div class="col-md-6 summary-label">{{t dashboard.services.yarn.resourceManager.uptime}}</div>
-    <div class="col-md-6 summary-value">{{view.nodeUptime}}</div>
   </div>
-</div>
-{{! left column end }}
 
-{{! right column }}
-<div class="col-md-6">
-  {{! ResourceManager Heap }}
-  <div class="row resourcemanager-heap">
-    <div class="col-md-6 summary-label">{{t dashboard.services.resourceManager.nodes.heap}}</div>
-    <div class="col-md-6 summary-value">{{view.nodeHeap}}</div>
-  </div>
-  {{! Containers }}
-  <div class="row yarn-containers">
-    <div class="col-md-6 summary-label">{{t dashboard.services.yarn.containers}}</div>
-    <div class="col-md-6 summary-value">{{view.containers}}</div>
-  </div>
-  {{! Applications }}
-  <div class="row yarn-applications">
-    <div class="col-md-6 summary-label">{{t dashboard.services.yarn.apps}}</div>
-    <div class="col-md-6 summary-value">{{view.apps}}</div>
-  </div>
-  {{! Memory }}
-  <div class="row yarn-memory">
-    <div class="col-md-6 summary-label">{{t dashboard.services.yarn.memory}}</div>
-    <div class="col-md-6 summary-value">{{view.memory}}</div>
-  </div>
-  {{! Queues }}
-  <div class="row yarn-queues">
-    <div class="col-md-6 summary-label">{{t dashboard.services.yarn.queues}}</div>
-    <div class="col-md-6 summary-value">
-        <span rel="queue-tooltip" class="text-tooltip" {{bindAttr data-original-title="view.service.queueFormatted" }}>
-          {{view.queues}}
-        </span>
+  {{! Service Metrics Section }}
+  <div class="col-md-12 metrics-summary">
+    <div class="col-md-2">{{t dashboard.services.hdfs.summary.service-metrics}}</div>
+    <div class="col-md-10">
+      {{! Containers }}
+      <div class="row col-md-3 yarn-containers">
+        <div class="summary-value">
+          <div class="main-info">{{view.containers}}</div>
+          <div class="info-desc">{{t dashboard.services.yarn.containers.msgDesc}}</div>
+        </div>
+        <div class="summary-label">{{t dashboard.services.yarn.containers}}</div>
+      </div>
+      {{! Applications }}
+      <div class="row col-md-3 yarn-applications">
+        <div class="summary-value">
+          <div class="main-info">{{view.apps}}</div>
+          <div class="info-desc">{{t dashboard.services.yarn.apps.msgDesc}}</div>
+        </div>
+        <div class="summary-label">{{t dashboard.services.yarn.apps}}</div>
+      </div>
+      {{! Memory }}
+      <div class="row col-md-3 yarn-memory">
+        <div class="summary-value">
+          <div class="main-info">{{view.memory}}</div>
+          <div class="info-desc">{{t dashboard.services.yarn.memory.msgDesc}}</div>
+        </div>
+        <div class="summary-label">{{t dashboard.services.yarn.memory}}</div>
+      </div>
+      {{! Queues }}
+      <div class="row col-md-3 yarn-queues">
+        <div class="summary-value main-info">
+          <span rel="queue-tooltip"
+                class="text-tooltip" {{bindAttr data-original-title="view.service.queueFormatted" }}>
+            {{view.queues}}
+          </span>
+        </div>
+        <div class="summary-label">{{t dashboard.services.yarn.queues}}</div>
+      </div>
     </div>
   </div>
-</div>
-{{! right column end }}
+  {{! right column end }}
 </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/views/common/quick_view_link_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/quick_view_link_view.js b/ambari-web/app/views/common/quick_view_link_view.js
index 47958f4..e39f230 100644
--- a/ambari-web/app/views/common/quick_view_link_view.js
+++ b/ambari-web/app/views/common/quick_view_link_view.js
@@ -39,6 +39,11 @@ App.QuickLinksView = Em.View.extend({
   showQuickLinks: false,
 
   /**
+   * @type {boolean}
+   */
+  showNoLinks: false,
+
+  /**
    * @type {string}
    */
   quickLinksErrorMessage: '',
@@ -211,6 +216,9 @@ App.QuickLinksView = Em.View.extend({
         this.set('requiredSiteNames', this.get('requiredSiteNames').pushObjects(sites).uniq());
         this.setQuickLinks();
       }
+    } else {
+      this.set('showNoLinks', true);
+
     }
   },
 
@@ -260,7 +268,11 @@ App.QuickLinksView = Em.View.extend({
     // no need to set quicklinks if
     // 1)current service does not have quick links configured
     // 2)No host component present for the configured quicklinks
-    this.set('showQuickLinks', hasQuickLinks && hasHosts);
+    if(hasQuickLinks && hasHosts) {
+      this.set('showQuickLinks', true);
+    } else {
+      this.set('showNoLinks', true);
+    }
 
     var isMultipleComponentsInLinks = componentNames.uniq().length > 1;
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/views/common/widget/gauge_widget_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/widget/gauge_widget_view.js b/ambari-web/app/views/common/widget/gauge_widget_view.js
index 42224fe..e359567 100644
--- a/ambari-web/app/views/common/widget/gauge_widget_view.js
+++ b/ambari-web/app/views/common/widget/gauge_widget_view.js
@@ -60,8 +60,8 @@ App.GaugeWidgetView = Em.View.extend(App.WidgetMixin, {
   }.property('value'),
 
   chartView: App.ChartPieView.extend({
-    stroke: '#D6DDDF',  //light grey
-    innerR: 25,
+    stroke: '#transparent',
+    innerR: 40,
 
     /**
      * since chart widget using percentage values factor equal 100
@@ -105,20 +105,18 @@ App.GaugeWidgetView = Em.View.extend(App.WidgetMixin, {
       var color_orange = App.healthStatusOrange;
       if ((isNaN(threshold1) && isNaN(threshold2)) || (isNaN(threshold1) && used <= threshold2) || (isNaN(threshold2) && used <= threshold1) || (!isNaN(threshold2) && (threshold1 > threshold2) && (used > threshold1)) || (!isNaN(threshold2) && (threshold1 < threshold2) && (used <= threshold1))) {
         this.set('palette', new Rickshaw.Color.Palette({
-          scheme: ['#FFFFFF', color_green].reverse()
+          scheme: ['#DDDDDD', color_green].reverse()
         }));
-        return color_green;
       } else if ((!isNaN(threshold2) && used.isInRange(threshold1, threshold2)) || (isNaN(threshold2) && used > threshold1)) {
         this.set('palette', new Rickshaw.Color.Palette({
-          scheme: ['#FFFFFF', color_orange].reverse()
+          scheme: ['#DDDDDD', color_orange].reverse()
         }));
-        return color_orange;
       } else {
         this.set('palette', new Rickshaw.Color.Palette({
-          scheme: ['#FFFFFF', color_red].reverse()
+          scheme: ['#DDDDDD', color_red].reverse()
         }));
-        return color_red;
       }
+      return App.widgetContentColor;
     }.property('parentView.value', 'warningThreshold', 'errorThreshold'),
 
     // refresh text and color when data in model changed

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/views/main/service/info/summary.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/service/info/summary.js b/ambari-web/app/views/main/service/info/summary.js
index 75d4ed5..69e339a 100644
--- a/ambari-web/app/views/main/service/info/summary.js
+++ b/ambari-web/app/views/main/service/info/summary.js
@@ -229,6 +229,30 @@ App.MainServiceInfoSummaryView = Em.View.extend(App.Persist, App.TimeRangeMixin,
 
   service: null,
 
+  svc: function () {
+    var svc = this.get('controller.content');
+    var svcName = svc.get('serviceName');
+    if (svcName) {
+      switch (svcName.toLowerCase()) {
+        case 'hdfs':
+          svc = App.HDFSService.find().objectAt(0);
+          break;
+        case 'yarn':
+          svc = App.YARNService.find().objectAt(0);
+          break;
+        case 'hbase':
+          svc = App.HBaseService.find().objectAt(0);
+          break;
+        case 'flume':
+          svc = App.FlumeService.find().objectAt(0);
+          break;
+        default:
+          break;
+      }
+    }
+    return svc;
+  }.property('controller.content.serviceName').volatile(),
+
   getServiceModel: function (serviceName) {
     var extended = App.Service.extendedModel[serviceName];
     if (extended) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/views/main/service/service.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/service/service.js b/ambari-web/app/views/main/service/service.js
index f2c8492..41afca3 100644
--- a/ambari-web/app/views/main/service/service.js
+++ b/ambari-web/app/views/main/service/service.js
@@ -113,7 +113,6 @@ App.MainDashboardServiceHealthView = Em.View.extend({
 });
 
 App.ComponentLiveTextView = Em.View.extend({
-  classNameBindings: ['color:service-summary-component-red-dead:service-summary-component-green-live'],
   liveComponents: null,
   totalComponents: null,
   color: function () {
@@ -173,15 +172,21 @@ App.MainDashboardServiceView = Em.View.extend(App.MainDashboardServiceViewWrappe
 });
 
 App.MainDashboardServiceView.reopenClass({
-  formattedHeap: function (i18nKey, heapUsedKey, heapMaxKey) {
+  formattedHeapPercent: function (i18nKey, heapUsedKey, heapMaxKey) {
     return Em.computed(heapUsedKey, heapMaxKey, function () {
       var memUsed = Em.get(this, heapUsedKey);
       var memMax = Em.get(this, heapMaxKey);
       var percent = memMax > 0 ? 100 * memUsed / memMax : 0;
+      return Em.I18n.t(i18nKey).format(percent.toFixed(1));
+    });
+  },
+  formattedHeap: function (i18nKey, heapUsedKey, heapMaxKey) {
+    return Em.computed(heapUsedKey, heapMaxKey, function () {
+      var memUsed = Em.get(this, heapUsedKey);
+      var memMax = Em.get(this, heapMaxKey);
       return Em.I18n.t(i18nKey).format(
         numberUtils.bytesToSize(memUsed, 1, 'parseFloat'),
-        numberUtils.bytesToSize(memMax, 1, 'parseFloat'),
-        percent.toFixed(1));
+        numberUtils.bytesToSize(memMax, 1, 'parseFloat'));
     });
   }
 });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/views/main/service/services/hbase.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/service/services/hbase.js b/ambari-web/app/views/main/service/services/hbase.js
index ddcb18d..fd889a9 100644
--- a/ambari-web/app/views/main/service/services/hbase.js
+++ b/ambari-web/app/views/main/service/services/hbase.js
@@ -58,7 +58,7 @@ App.MainDashboardServiceHbaseView = App.MainDashboardServiceView.extend({
   activeMasterTitle: Em.I18n.t('service.hbase.activeMaster'),
 
   masterServerHeapSummary: App.MainDashboardServiceView.formattedHeap('dashboard.services.hbase.masterServerHeap.summary', 'service.heapMemoryUsed', 'service.heapMemoryMax'),
-
+  masterServerHeapSummaryPercent: App.MainDashboardServiceView.formattedHeapPercent('dashboard.services.hbase.masterServerHeap.percent', 'service.heapMemoryUsed', 'service.heapMemoryMax'),
   summaryHeader: function () {
     var avgLoad = this.get('service.averageLoad');
     if (isNaN(avgLoad)) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/views/main/service/services/hdfs.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/service/services/hdfs.js b/ambari-web/app/views/main/service/services/hdfs.js
index becb75c..e0580f1 100644
--- a/ambari-web/app/views/main/service/services/hdfs.js
+++ b/ambari-web/app/views/main/service/services/hdfs.js
@@ -28,7 +28,20 @@ function diskPart(i18nKey, totalKey, usedKey) {
     if (percent == "NaN" || percent < 0) {
       percent = Em.I18n.t('services.service.summary.notAvailable') + " ";
     }
-    return text.format(numberUtils.bytesToSize(used, 1, 'parseFloat'), numberUtils.bytesToSize(total, 1, 'parseFloat'), percent);
+    return text.format(numberUtils.bytesToSize(used, 1, 'parseFloat'), numberUtils.bytesToSize(total, 1, 'parseFloat'));
+  });
+}
+
+function diskPartPercent(i18nKey, totalKey, usedKey) {
+  return Em.computed(totalKey, usedKey, function () {
+    var text = Em.I18n.t(i18nKey);
+    var total = this.get(totalKey);
+    var used = this.get(usedKey);
+    var percent = total > 0 ? ((used * 100) / total).toFixed(2) : 0;
+    if (percent == "NaN" || percent < 0) {
+      percent = Em.I18n.t('services.service.summary.notAvailable') + " ";
+    }
+    return text.format(percent);
   });
 }
 
@@ -113,9 +126,11 @@ App.MainDashboardServiceHdfsView = App.MainDashboardServiceView.extend({
     return this.t('services.service.summary.notRunning');
   }.property("service.nameNodeStartTime"),
 
+  nodeHeapPercent: App.MainDashboardServiceView.formattedHeapPercent('dashboard.services.hdfs.nodes.heapUsedPercent', 'service.jvmMemoryHeapUsed', 'service.jvmMemoryHeapMax'),
   nodeHeap: App.MainDashboardServiceView.formattedHeap('dashboard.services.hdfs.nodes.heapUsed', 'service.jvmMemoryHeapUsed', 'service.jvmMemoryHeapMax'),
 
   dfsUsedDisk: diskPart('dashboard.services.hdfs.capacityUsed', 'service.capacityTotal', 'service.capacityUsed'),
+  dfsUsedDiskPercent: diskPartPercent('dashboard.services.hdfs.capacityUsedPercent', 'service.capacityTotal', 'service.capacityUsed'),
 
   nonDfsUsed: function () {
     var total = this.get('service.capacityTotal');
@@ -125,8 +140,10 @@ App.MainDashboardServiceHdfsView = App.MainDashboardServiceView.extend({
   }.property('service.capacityTotal', 'service.capacityRemaining', 'service.capacityUsed'),
 
   nonDfsUsedDisk: diskPart('dashboard.services.hdfs.capacityUsed', 'service.capacityTotal', 'nonDfsUsed'),
+  nonDfsUsedDiskPercent: diskPartPercent('dashboard.services.hdfs.capacityUsedPercent', 'service.capacityTotal', 'nonDfsUsed'),
 
   remainingDisk: diskPart('dashboard.services.hdfs.capacityUsed', 'service.capacityTotal', 'service.capacityRemaining'),
+  remainingDiskPercent: diskPartPercent('dashboard.services.hdfs.capacityUsedPercent', 'service.capacityTotal', 'service.capacityRemaining'),
 
   dataNodeComponent: Em.Object.create({
     componentName: 'DATANODE'

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/views/main/service/services/yarn.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/service/services/yarn.js b/ambari-web/app/views/main/service/services/yarn.js
index 84ba520..3533585 100644
--- a/ambari-web/app/views/main/service/services/yarn.js
+++ b/ambari-web/app/views/main/service/services/yarn.js
@@ -24,7 +24,8 @@ App.MainDashboardServiceYARNView = App.MainDashboardServiceView.extend({
   serviceName: 'YARN',
 
   nodeHeap: App.MainDashboardServiceView.formattedHeap('dashboard.services.yarn.nodes.heapUsed', 'service.jvmMemoryHeapUsed', 'service.jvmMemoryHeapMax'),
-  
+  nodeHeapPercent: App.MainDashboardServiceView.formattedHeapPercent('dashboard.services.yarn.nodes.heapUsedPercent', 'service.jvmMemoryHeapUsed', 'service.jvmMemoryHeapMax'),
+
   nodeManagerComponent: Em.Object.create({
     componentName: 'NODEMANAGER'
   }),

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/test/views/common/widget/gauge_widget_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/common/widget/gauge_widget_view_test.js b/ambari-web/test/views/common/widget/gauge_widget_view_test.js
index 1967289..2c8ef30 100644
--- a/ambari-web/test/views/common/widget/gauge_widget_view_test.js
+++ b/ambari-web/test/views/common/widget/gauge_widget_view_test.js
@@ -251,7 +251,7 @@ describe('App.GaugeWidgetView', function () {
         view.set('value', test.data.value);
         view.set('content.properties.warning_threshold', test.data.warningThreshold);
         view.set('content.properties.error_threshold', test.data.criticalThreshold);
-        expect(chartView.get('contentColor')).to.eql(test.result);
+        expect(chartView.get('palette').color(0)).to.eql(test.result);
       });
     });
   });


[25/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/summary.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/summary.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/summary.hbs
deleted file mode 100644
index 28597dc..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/summary.hbs
+++ /dev/null
@@ -1,135 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-
-<div class="clearfix">
-  <div class="column-left col-md-6">
-    {{#bs-panel heading="Summary" class="panel-summary"}}
-      <table class="table no-borders table-condensed">
-        <tbody>
-        <tr>
-          <td style="width: 25%;">{{t common.status}}</td>
-          <td>{{controller.model.displayStatus}}</td>
-        </tr>
-        <tr>
-          <td>{{t common.type}}</td>
-          <td>{{controller.appType}}</td>
-        </tr>
-        <tr>
-          <td>{{t common.yarn.app.id}}</td>
-          <td>{{controller.model.yarnId}}</td>
-        </tr>
-        <tr>
-          <td>{{t common.started}}</td>
-          <td>{{formatWordBreak controller.model.startedToLocalTime}}</td>
-        </tr>
-        <tr>
-          <td>{{t common.finished}}</td>
-          <td>{{formatWordBreak controller.model.endedToLocalTime}}</td>
-        </tr>
-        <tr>
-          <td>{{t common.diagnostics}}</td>
-          <td>{{formatWordBreak controller.model.diagnostics devider="."}}</td>
-        </tr>
-          {{#each controller.model.jmx}}
-          <tr>
-            <td>{{humanize key}}</td>
-            <td>{{formatWordBreak value}}</td>
-          </tr>
-          {{/each}}
-        </tbody>
-      </table>
-    {{/bs-panel}}
-  </div>
-  <div class="column-right col-md-6">
-    <div class="panel panel-default panel-alerts">
-      <div class="panel-heading">
-        {{t common.status}}
-        <div class="btn-group pull-right panel-link">
-        </div>
-      </div>
-      <div class="app-alerts">
-        <ul>
-          {{#if controller.model.doNotShowComponentsAndAlerts}}
-            <li>
-              <div class="container-fluid">{{t sliderApp.alerts.no.status}}</div>
-            </li>
-          {{else}}
-            {{#each controller.model.alerts}}
-              {{#view view.AlertView contentBinding="this"}}
-                <div class="container-fluid">
-                  <div class="row">
-                    <div class="col-md-1 status-icon">
-                      <i {{bind-attr class="iconClass :icon-small"}}></i>
-                    </div>
-                    <div class="col-md-11">
-                      <div class="row">
-                        <div class="col-md-7 title">{{title}}</div>
-                        <div class="message">{{message}}</div>
-                      </div>
-                    </div>
-                  </div>
-                </div>
-              {{/view}}
-            {{/each}}
-          {{/if}}
-        </ul>
-      </div>
-    </div>
-    {{#bs-panel heading="Components" class="panel-components"}}
-      <table class="table no-borders table-condensed">
-        <tbody>
-          {{#if controller.model.doNotShowComponentsAndAlerts}}
-          <tr>
-            <td>{{t sliderApp.summary.no.components}}</td>
-          </tr>
-          {{else}}
-            {{#each controller.model.components}}
-            <tr>
-              <td><span {{bind-attr class="isRunning:icon-ok-sign:icon-warning-sign :status"}}></span> {{componentName}}
-              </td>
-              <td>
-                {{#if url}}
-                  <a {{bind-attr href="url"}} target="_blank">{{host}}</a>
-                {{else}}
-                  {{host}}
-                {{/if}}
-              </td>
-            </tr>
-            {{/each}}
-          {{/if}}
-        </tbody>
-      </table>
-    {{/bs-panel}}
-  </div>
-</div>
-
-{{#if controller.model.showMetrics}}
-  <div {{bind-attr class="view.graphsNotEmpty:visible:hidden :panel :panel-default"}}>
-    <div class="panel-heading">
-      {{t common.metrics}}
-    </div>
-    <div class="panel-body">
-      <div class="row">
-        {{#each graph in view.graphs}}
-          <div class="col-md-3">{{view graph.view}}</div>
-        {{/each}}
-      </div>
-    </div>
-  </div>
-{{/if}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/slider_apps.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/slider_apps.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/slider_apps.hbs
deleted file mode 100644
index d4631e8..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/slider_apps.hbs
+++ /dev/null
@@ -1,87 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<div id="slider-apps-table">
-
-  <table class="datatable table table-striped" id="slider-table">
-    <thead>
-    {{#view view.sortView classNames="label-row" contentBinding="view.filteredContent"}}
-      {{view view.parentView.nameSort}}
-      {{view view.parentView.statusSort}}
-      {{view view.parentView.typeSort}}
-      {{view view.parentView.userSort}}
-      {{view view.parentView.startSort}}
-      {{view view.parentView.endSort}}
-    {{/view}}
-    <tr id="filter-row">
-      <th>{{view view.nameFilterView}}</th>
-      <th>{{view view.statusFilterView}}</th>
-      <th>{{view view.typeFilterView}}</th>
-      <th>{{view view.userFilterView}}</th>
-      <th>{{view view.startFilterView}}</th>
-      <th></th>
-    </tr>
-    </thead>
-    <tbody>
-    {{#if view.pageContent}}
-      {{#each slider in view.pageContent}}
-        {{#view view.SliderView contentBinding="slider"}}
-
-          <td>
-            {{#link-to 'slider_app.summary' slider}}
-              <span {{bs-bind-popover view.popover}}>{{slider.name}}</span>
-            {{/link-to}}
-          </td>
-
-          <td>{{slider.displayStatus}}</td>
-
-          <td>{{slider.appType.displayName}}</td>
-
-          <td>{{slider.user}}</td>
-
-          <td>{{slider.startedToLocalTime}}</td>
-
-          <td>{{slider.endedToLocalTime}}</td>
-
-        {{/view}}
-      {{/each}}
-    {{else}}
-      <tr>
-        <td colspan="6">
-          {{t tableView.filters.noItems}}
-        </td>
-      </tr>
-    {{/if}}
-    </tbody>
-  </table>
-  <div class="page-bar">
-    <div class="filtered-hosts-info span4">
-      <label>{{view.filteredContentInfo}} - <a {{action clearFilters target="view"}}
-          href="#" class="clearFiltersLink">{{t tableView.filters.clearAllFilters}}</a></label>
-    </div>
-    <div class="items-on-page">
-      <label>{{t common.show}} {{view view.rowsPerPageSelectView selectionBinding="view.displayLength"}}</label>
-    </div>
-    <div class="info">{{view.paginationInfo}}</div>
-    <div class="paging_two_button">
-      {{view view.paginationLeft}}
-      {{view view.paginationRight}}
-    </div>
-  </div>
-</div>
-{{outlet}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/slider_title_tooltip.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/slider_title_tooltip.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/slider_title_tooltip.hbs
deleted file mode 100644
index 3857a35..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/slider_title_tooltip.hbs
+++ /dev/null
@@ -1,27 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<div class="slider-name-popover">
-  <p class="slider-description">{{App.description}}</p>
-  {{#each config in view.content}}
-    <div class="row">
-      <div class="col-md-4">{{humanize config.displayName}}</div>
-      <div class="col-md-8">{{formatWordBreak config.value devider=','}}</div>
-    </div>
-  {{/each}}
-</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/unavailable_apps.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/unavailable_apps.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/unavailable_apps.hbs
deleted file mode 100644
index 575a865..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/unavailable_apps.hbs
+++ /dev/null
@@ -1,22 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-{{t slider.apps.unavailable}}
-<div class="alert alert-danger">
-    {{controller.errorMessage}}
-</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/translations.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/translations.js b/contrib/views/slider/src/main/resources/ui/app/translations.js
deleted file mode 100644
index f26fee2..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/translations.js
+++ /dev/null
@@ -1,169 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-Em.I18n.translations = {
-
-  'ok': 'OK',
-  'yes': 'Yes',
-  'no': 'No',
-  'any': 'Any',
-
-  'common' : {
-    'add': 'Add',
-    'show': 'Show',
-    'actions': 'Actions',
-    'cancel': 'Cancel',
-    'name': "Name",
-    'back': "Back",
-    'delete': 'Delete',
-    'destroy': 'Destroy',
-    'value': "Value",
-    'next': "Next",
-    'quickLinks': "Quick Links",
-    'summary': 'Summary',
-    'configs': 'Configs',
-    'metrics': 'Metrics',
-    'confirmation': 'Confirmation',
-    'configuration': 'Configuration',
-    'finish': 'Finish',
-    'components': 'Components',
-    'type': 'Type',
-    'status': 'Status',
-    'started': 'Started',
-    'finished': 'Finished',
-    'diagnostics': 'Diagnostics',
-    'description': 'Description',
-    'warning': 'Warning',
-    'key': 'Key',
-    'remove': 'Remove',
-    'send': 'Send',
-    'error': 'Error',
-    'yarn.app.id': 'YARN Application ID',
-    'frequency': 'Frequency',
-    'minutes': 'Minutes',
-    'seconds': 'Seconds',
-    'save': 'Save'
-  },
-
-  'form': {
-    'placeholder': {
-      'optional': '(optional)',
-      'step1.name': 'Enter Name (required)',
-      'include.file.patterns': '.*log',
-      'exclude.file.patterns': '.*zip',
-      'frequency': '3600'
-    }
-  },
-
-  'error.config_is_empty': 'Config <strong>{0}</strong> should not be empty',
-  'error.config_is_empty_2': 'Config <strong>{0}</strong> should not be empty, because <strong>{1}</strong> is set to "true"',
-
-  'popup.confirmation.commonHeader': 'Confirmation',
-  'question.sure':'Are you sure?',
-
-  'tableView.filters.all': 'All',
-  'tableView.filters.filtered': 'Filtered',
-  'tableView.filters.clearFilters': 'Clear filters',
-  'tableView.filters.paginationInfo': '{0} - {1} of {2}',
-  'tableView.filters.clearAllFilters': 'clear filters',
-  'tableView.filters.showAll': 'Show All',
-  'tableView.filters.clearSelection': 'clear selection All',
-  'tableView.filters.noItems' : 'No slider apps to display',
-
-  'configs.add_property': 'Add Property',
-  'configs.add_property.invalid_name': 'Config name should consists only of letters, numbers, \'-\', \'_\', \'.\' and first character should be a letter.',
-  'configs.add_property.name_exists': 'Config name already exists',
-  'configs.enable.metrics': 'Enable Metrics',
-
-  'slider.apps.title': 'Slider Apps',
-  'slider.apps.create': 'Create App',
-  'slider.apps.unavailable': 'Unable to get list of Slider Apps due to issues below. Possible reasons include incorrect or invalid view parameters. Please contact administrator for setting up proper view parameters and verifying necessary services are working.',
-  'slider.apps.undefined.issue': 'Undefined issue',
-  'sliderApps.filters.info': '{0} of {1} slider apps showing',
-  'slider.apps.no.description.available': 'No Description Available',
-  'slider.apps.no.applications.available': 'No Applications Available',
-
-  'sliderApp.flex.invalid_counts': 'Instance counts should be integer and >= 0',
-  'sliderApp.flex.message': 'Update the number of desired instances for each component of this application',
-
-  'sliderApp.summary.go_to_nagios': 'Go to Nagios',
-  'sliderApp.summary.no.components': 'No components are currently running',
-
-  'sliderApp.alerts.no.status': 'No component statuses are currently available',
-  'sliderApp.alerts.OK.timePrefixShort': 'OK',
-  'sliderApp.alerts.WARN.timePrefixShort': 'WARN',
-  'sliderApp.alerts.CRIT.timePrefixShort': 'CRIT',
-  'sliderApp.alerts.MAINT.timePrefixShort': 'MAINT',
-  'sliderApp.alerts.UNKNOWN.timePrefixShort': 'UNKNOWN',
-  'sliderApp.alerts.OK.timePrefix': 'OK for {0}',
-  'sliderApp.alerts.WARN.timePrefix': 'WARN for {0}',
-  'sliderApp.alerts.CRIT.timePrefix': 'CRIT for {0}',
-  'sliderApp.alerts.MAINT.timePrefix': 'MAINT for {0}',
-  'sliderApp.alerts.UNKNOWN.timePrefix': 'UNKNOWN for {0}',
-  'sliderApp.alerts.lastCheck': 'Last Checked {0}',
-  'sliderApp.alerts.brLastCheck': "\nLast Checked {0}",
-  'sliderApp.alerts.occurredOn': 'Occurred on {0}, {1}',
-
-  'sliderApp.destroy.confirm.title': 'Destroy Slider App',
-  'sliderApp.destroy.confirm.body': 'Destroying a Slider App could result in data loss if not property performed. Make sure you have backed up data handled by the application.',
-  'sliderApp.destroy.confirm.body2': 'Are you sure you want to destroy Slider App <em>{0}</em>?',
-
-  'wizard.name': 'Create App',
-  'wizard.step1.name': 'Select Type',
-  'wizard.step1.header': 'Select Application',
-  'wizard.step1.appTypes': 'Application Types',
-  'wizard.step1.description': 'Description',
-  'wizard.step1.schedulerOptions.label': 'Scheduler Options',
-  'wizard.step1.schedulerOptions.queueName': 'Queue Name',
-  'wizard.step1.yarnLabels.label': 'YARN Labels',
-  'wizard.step1.yarnLabels.options.anyHost': 'Any Host',
-  'wizard.step1.yarnLabels.options.nonLabeledHost': 'Non-Labeled Host',
-  'wizard.step1.yarnLabels.options.specifyLabel': 'Specify Label',
-  'wizard.step1.logAggregation.label': 'Log Aggregation',
-  'wizard.step1.logAggregation.filePatterns.include': 'Include File Patterns',
-  'wizard.step1.logAggregation.filePatterns.exclude': 'Exclude File Patterns',
-  'wizard.step1.typeDescription': 'Deploys {0} cluster on YARN.',
-  'wizard.step1.nameFormatError': 'App Name should consist only of lower case letters, numbers, \'-\', and \'_\'. Also, first character should be a lower case letter.',
-  'wizard.step1.nameRepeatError': 'App with entered Name already exists.',
-  'wizard.step1.validateAppNameError': 'Application with name \'{0}\' already exists',
-  'wizard.step1.noAppTypesError': 'No Slider Application packages have been installed on this server. Please contact your Ambari server administrator to install Slider Application packages into /var/lib/ambari-server/resources/apps/ folder and restart Ambari server.',
-  'wizard.step1.frequencyError': 'Frequency value should be numeric',
-  'wizard.step1.enable2wayssl': 'Enable Two-Way SSL',
-  'wizard.step2.name': 'Allocate Resources',
-  'wizard.step2.header': ' application requires resources to be allocated on the cluster. Provide resource allocation requests for each component of the application below.',
-  'wizard.step2.table.instances': 'Instances',
-  'wizard.step2.table.memory': 'Memory (MB)',
-  'wizard.step2.table.cpu': 'CPU	Cores',
-  'wizard.step2.table.yarnLabels': 'YARN Labels',
-  'wizard.step2.table.popoverCheckbox': 'Check box to enable YARN labels on component',
-  'wizard.step2.table.popoverLabel': 'Provide YARN label to make component run on labeled hosts. Empty value would make component run on non-labeled hosts.',
-  'wizard.step2.error.numbers': 'All fields should be filled. Only integer numbers allowed.',
-  'wizard.step3.name': 'Configuration',
-  'wizard.step3.header.beginning': 'Provide	configuration	details	for	',
-  'wizard.step3.header.end': '	application',
-  'wizard.step3.error': 'Only \"key\":\"value\" format allowed.',
-  'wizard.step4.name': 'Deploy',
-  'wizard.step4.appName': 'App Name',
-  'wizard.step4.appType': 'App Type',
-  'wizard.step4.2waysslEnabled': 'Two-Way SSL Enabled',
-
-  'ajax.errorMessage': 'Error message',
-  'ajax.apiInfo': 'received on {0} method for API: {1}',
-  'ajax.statusCode': '{0} status code'
-};

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/.gitkeep
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/.gitkeep b/contrib/views/slider/src/main/resources/ui/app/views/.gitkeep
deleted file mode 100755
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/application_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/application_view.js b/contrib/views/slider/src/main/resources/ui/app/views/application_view.js
deleted file mode 100644
index 1d8eaf1..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/application_view.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.ApplicationView = Ember.View.extend({
-
-  /**
-   * View with popover for Slider title
-   * @type {Ember.View}
-   */
-  SliderTitleView: Em.View.extend({
-
-    showCreateAppButton: function () {
-      if (this.get('controller.hasConfigErrors')) {
-        return false;
-      }
-      var currentPath = this.get('controller.currentPath');
-      return currentPath && (currentPath == 'slider_apps.index' || currentPath.indexOf('slider_apps.createAppWizard') != -1);
-    }.property('controller.currentPath', 'controller.hasConfigErrors'),
-
-    /**
-     * Set <code>popover</code> template
-     * @method sliderConfigsChecker
-     */
-    sliderConfigsChecker: function() {
-      var template = this.createChildView(App.SliderTitleTooltipView, {
-        content: App.SliderApp.store.all('sliderConfig')
-      });
-      $('#slider-title').data('bs.popover').options.content = template.renderToBuffer().string();
-    }.observes('App.mapperTime'),
-
-    didInsertElement: function () {
-      this.createPopover();
-    },
-
-    /**
-     * Create popover for Slider Title
-     * @method createPopover
-     */
-    createPopover: function() {
-      $('#slider-title').popover('destroy').popover({
-        trigger: 'hover',
-        placement: 'bottom',
-        title: App.get('label'),
-        html: true
-      });
-      this.sliderConfigsChecker();
-    }.observes('App.label')
-
-  })
-
-});
-
-App.SliderTitleTooltipView = Em.View.extend({
-  templateName: 'slider_title_tooltip'
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/common/chart_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/common/chart_view.js b/contrib/views/slider/src/main/resources/ui/app/views/common/chart_view.js
deleted file mode 100644
index 021117c..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/common/chart_view.js
+++ /dev/null
@@ -1,914 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with this
- * work for additional information regarding copyright ownership. The ASF
- * licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-var string_utils = require('helpers/string_utils');
-
-/**
- * @class
- *
- * This is a view which GETs data from a URL and shows it as a time based line
- * graph. Time is shown on the X axis with data series shown on Y axis. It
- * optionally also has the ability to auto refresh itself over a given time
- * interval.
- *
- * This is an abstract class which is meant to be extended.
- *
- * Extending classes should override the following:
- * <ul>
- * <li>url - from where the data can be retrieved
- * <li>title - Title to be displayed when showing the chart
- * <li>id - which uniquely identifies this chart in any page
- * <li>#transformToSeries(jsonData) - function to map server data into graph
- * series
- * </ul>
- *
- * Extending classes could optionally override the following:
- * <ul>
- * <li>#colorForSeries(series) - function to get custom colors per series
- * </ul>
- *
- * @extends Ember.Object
- * @extends Ember.View
- */
-App.ChartView = Ember.View.extend({
-
-  templateName: 'common/chart',
-
-  /**
-   * The URL from which data can be retrieved.
-   *
-   * This property must be provided for the graph to show properly.
-   *
-   * @type String
-   * @default null
-   */
-  url: null,
-
-  /**
-   * A unique ID for this chart.
-   *
-   * @type String
-   * @default null
-   */
-  id: null,
-
-  /**
-   * Title to be shown under the chart.
-   *
-   * @type String
-   * @default null
-   */
-  title: null,
-
-  /**
-   * @private
-   *
-   * @type Rickshaw.Graph
-   * @default null
-   */
-  _graph: null,
-
-  /**
-   * Array of classnames for each series (in widget)
-   * @type Rickshaw.Graph
-   */
-  _popupGraph: null,
-
-  /**
-   * Array of classnames for each series
-   * @type Array
-   */
-  _seriesProperties: null,
-
-  /**
-   * Array of classnames for each series (in widget)
-   * @type Array
-   */
-  _seriesPropertiesWidget: null,
-
-  /**
-   * Renderer type
-   * See <code>Rickshaw.Graph.Renderer</code> for more info
-   * @type String
-   */
-  renderer: 'area',
-
-  /**
-   * Suffix used in DOM-elements selectors
-   * @type String
-   */
-  popupSuffix: '-popup',
-
-  /**
-   * Is popup for current graph open
-   * @type Boolean
-   */
-  isPopup: false,
-
-  /**
-   * Is graph ready
-   * @type Boolean
-   */
-  isReady: false,
-
-  /**
-   * Is popup-graph ready
-   * @type Boolean
-   */
-  isPopupReady: false,
-
-  /**
-   * Is data for graph available
-   * @type Boolean
-   */
-  hasData: true,
-
-  containerId: null,
-  containerClass: null,
-  yAxisId: null,
-  yAxisClass: null,
-  xAxisId: null,
-  xAxisClass: null,
-  legendId: null,
-  legendClass: null,
-  chartId: null,
-  chartClass: null,
-  titleId: null,
-  titleClass: null,
-
-  didInsertElement: function() {
-    var id = this.get('id');
-    var idTemplate = id + '-{element}';
-
-    this.set('containerId', idTemplate.replace('{element}', 'container'));
-    this.set('containerClass', 'chart-container');
-    this.set('yAxisId', idTemplate.replace('{element}', 'yaxis'));
-    this.set('yAxisClass', this.get('yAxisId'));
-    this.set('xAxisId', idTemplate.replace('{element}', 'xaxis'));
-    this.set('xAxisClass', this.get('xAxisId'));
-    this.set('legendId', idTemplate.replace('{element}', 'legend'));
-    this.set('legendClass', this.get('legendId'));
-    this.set('chartId', idTemplate.replace('{element}', 'chart'));
-    this.set('chartClass', this.get('chartId'));
-    this.set('titleId', idTemplate.replace('{element}', 'title'));
-    this.set('titleClass', this.get('titleId'));
-    this.set('interval', 6000);
-    this.run('loadData', true);
-  },
-
-  willDestroyElement: function() {
-    this.stop(); // Stop periodic load
-  },
-
-  loadData: function() {
-    App.ajax.send({
-      name: this.get('ajaxIndex'),
-      sender: this,
-      data: this.getDataForAjaxRequest(),
-      success: '_refreshGraph',
-      error: 'loadDataErrorCallback'
-    });
-  },
-
-  getDataForAjaxRequest: function() {
-    return {};
-  },
-
-  loadDataErrorCallback: function() {
-    this.set('isReady', true);
-    this.set('isPopup', false);
-    this.set('hasData', false);
-  },
-
-  /**
-   * Shows a yellow warning message in place of the chart.
-   *
-   * @param type  Can be any of 'warn', 'error', 'info', 'success'
-   * @param title Bolded title for the message
-   * @param message String representing the message
-   * @type: Function
-   */
-  _showMessage: function(type, title, message) {
-    var chartOverlay = '#' + this.get('id');
-    var chartOverlayId = chartOverlay + '-chart';
-    var chartOverlayY = chartOverlay + '-yaxis';
-    var chartOverlayX = chartOverlay + '-xaxis';
-    var chartOverlayLegend = chartOverlay + '-legend';
-    var chartOverlayTimeline = chartOverlay + '-timeline';
-    if (this.get('isPopup')) {
-      chartOverlayId += this.get('popupSuffix');
-      chartOverlayY += this.get('popupSuffix');
-      chartOverlayX += this.get('popupSuffix');
-      chartOverlayLegend += this.get('popupSuffix');
-      chartOverlayTimeline += this.get('popupSuffix');
-    }
-    var typeClass;
-    switch (type) {
-      case 'error':
-        typeClass = 'alert-error';
-        break;
-      case 'success':
-        typeClass = 'alert-success';
-        break;
-      case 'info':
-        typeClass = 'alert-info';
-        break;
-      default:
-        typeClass = '';
-        break;
-    }
-    $(chartOverlayId+', '+chartOverlayY+', '+chartOverlayX+', '+chartOverlayLegend+', '+chartOverlayTimeline).html('');
-    $(chartOverlayId).append('<div class=\"alert '+typeClass+'\"><strong>'+title+'</strong> '+message+'</div>');
-  },
-
-  /**
-   * Transforms the JSON data retrieved from the server into the series
-   * format that Rickshaw.Graph understands.
-   *
-   * The series object is generally in the following format: [ { name :
-   * "Series 1", data : [ { x : 0, y : 0 }, { x : 1, y : 1 } ] } ]
-   *
-   * Extending classes should override this method.
-   *
-   * @param seriesData
-   *          Data retrieved from the server
-   * @param displayName
-   *          Graph title
-   * @type: Function
-   *
-   */
-  transformData: function (seriesData, displayName) {
-    var seriesArray = [];
-    if (seriesData != null) {
-      // Is it a string?
-      if ("string" == typeof seriesData) {
-        seriesData = JSON.parse(seriesData);
-      }
-      // Is it a number?
-      if ("number" == typeof seriesData) {
-        // Same number applies to all time.
-        var number = seriesData;
-        seriesData = [];
-        seriesData.push([number, (new Date().getTime())-(60*60)]);
-        seriesData.push([number, (new Date().getTime())]);
-      }
-      // We have valid data
-      var series = {};
-      series.name = displayName;
-      series.data = [];
-      for ( var index = 0; index < seriesData.length; index++) {
-        series.data.push({
-          x: seriesData[index][1],
-          y: seriesData[index][0]
-        });
-      }
-      return series;
-    }
-    return null;
-  },
-
-  /**
-   * Provides the formatter to use in displaying Y axis.
-   *
-   * Uses the App.ChartLinearTimeView.DefaultFormatter which shows 10K,
-   * 300M etc.
-   *
-   * @type Function
-   */
-  yAxisFormatter: function(y) {
-    return App.ChartView.DefaultFormatter(y);
-  },
-
-  /**
-   * Provides the color (in any HTML color format) to use for a particular
-   * series.
-   * May be redefined in child views
-   *
-   * @param series
-   *          Series for which color is being requested
-   * @return color String. Returning null allows this chart to pick a color
-   *         from palette.
-   * @default null
-   * @type Function
-   */
-  colorForSeries: function (series) {
-    return null;
-  },
-
-  /**
-   * Check whether seriesData is correct data for chart drawing
-   * @param {Array} seriesData
-   * @return {Boolean}
-   */
-  checkSeries : function(seriesData) {
-    if(!seriesData || !seriesData.length) {
-      return false;
-    }
-    var result = true;
-    seriesData.forEach(function(item) {
-      if(!item.data || !item.data.length || !item.data[0] || typeof item.data[0].x === 'undefined') {
-        result = false;
-      }
-    });
-    return result;
-  },
-
-  /**
-   * @private
-   *
-   * Refreshes the graph with the latest JSON data.
-   *
-   * @type Function
-   */
-  _refreshGraph: function (jsonData) {
-    if(this.get('isDestroyed')){
-      return;
-    }
-    var seriesData = this.transformToSeries(jsonData);
-
-    //if graph opened as modal popup
-    var popup_path = $("#" + this.get('id') + "-container" + this.get('popupSuffix'));
-    var graph_container = $("#" + this.get('id') + "-container");
-    if(popup_path.length) {
-      popup_path.children().each(function () {
-        $(this).children().remove();
-      });
-      this.set('isPopup', true);
-    }
-    else {
-      //set height for empty container while graph drawing to avoid viewport shrinking by height
-      graph_container.css('height', graph_container.css('height'));
-      graph_container.children().each(function (index, value) {
-        $(value).children().remove();
-      });
-    }
-    if (this.checkSeries(seriesData)) {
-      // Check container exists (may be not, if we go to another page and wait while graphs loading)
-      if (graph_container.length) {
-        this.draw(seriesData);
-        this.set('hasData', true);
-        //move yAxis value lower to make them fully visible
-        $("#" + this.get('id') + "-container").find('.y_axis text').attr('y',8);
-      }
-    }
-    else {
-      this.set('isReady', true);
-      //if Axis X time interval is default(60 minutes)
-      if(this.get('timeUnitSeconds') === 3600){
-        this.set('hasData', false);
-      }
-      this.set('isPopup', false);
-    }
-    graph_container.css('height', 'auto');
-  },
-
-  /**
-   * Returns a custom time unit, that depends on X axis interval length, for the graph's X axis.
-   * This is needed as Rickshaw's default time X axis uses UTC time, which can be confusing
-   * for users expecting locale specific time.
-   *
-   * If <code>null</code> is returned, Rickshaw's default time unit is used.
-   *
-   * @type Function
-   * @return Rickshaw.Fixtures.Time
-   */
-  localeTimeUnit: function(timeUnitSeconds) {
-    var timeUnit = new Rickshaw.Fixtures.Time();
-    switch (timeUnitSeconds){
-      case 604800:
-        timeUnit = timeUnit.unit('day');
-        break;
-      case 2592000:
-        timeUnit = timeUnit.unit('week');
-        break;
-      case 31104000:
-        timeUnit = timeUnit.unit('month');
-        break;
-      default:
-        timeUnit = {
-          name: timeUnitSeconds / 240 + ' minute',
-          seconds: timeUnitSeconds / 4,
-          formatter: function (d) {
-            return d.toLocaleString().match(/(\d+:\d+):/)[1];
-          }
-        };
-    }
-    return timeUnit;
-  },
-
-  /**
-   * temporary fix for incoming data for graph
-   * to shift data time to correct time point
-   * @param {Array} data
-   */
-  dataShiftFix: function(data) {
-    var nowTime = Math.round((new Date().getTime()) / 1000);
-    data.forEach(function(series){
-      var l = series.data.length;
-      var shiftDiff = nowTime - series.data[l - 1].x;
-      if(shiftDiff > 3600){
-        for(var i = 0;i < l;i++){
-          series.data[i].x = series.data[i].x + shiftDiff;
-        }
-        series.data.unshift({
-          x: nowTime - this.get('timeUnitSeconds'),
-          y: 0
-        });
-      }
-    }, this);
-  },
-
-  /**
-   * calculate statistic data for popup legend and set proper colors for series
-   * @param {Array} data
-   */
-  dataPreProcess: function(data) {
-    var self = this;
-    var palette = new Rickshaw.Color.Palette({ scheme: 'munin'});
-    // Format series for display
-    var series_min_length = 100000000;
-    data.forEach(function (series, index) {
-      var seriesColor = self.colorForSeries(series);
-      if (seriesColor == null) {
-        seriesColor = palette.color();
-      }
-      series.color = seriesColor;
-      series.stroke = 'rgba(0,0,0,0.3)';
-      if (this.get('isPopup')) {
-        // calculate statistic data for popup legend
-        var avg = 0;
-        var min = Number.MAX_VALUE;
-        var max = Number.MIN_VALUE;
-        for (var i = 0; i < series.data.length; i++) {
-          avg += series.data[i]['y'];
-          if (series.data[i]['y'] < min) {
-            min = series.data[i]['y'];
-          }
-          else {
-            if (series.data[i]['y'] > max) {
-              max = series.data[i]['y'];
-            }
-          }
-        }
-        series.name = string_utils.pad(series.name, 30, '&nbsp;', 2) +
-          string_utils.pad('min', 5, '&nbsp;', 3) +
-          string_utils.pad(this.get('yAxisFormatter')(min), 12, '&nbsp;', 3) +
-          string_utils.pad('avg', 5, '&nbsp;', 3) +
-          string_utils.pad(this.get('yAxisFormatter')(avg/series.data.length), 12, '&nbsp;', 3) +
-          string_utils.pad('max', 12, '&nbsp;', 3) +
-          string_utils.pad(this.get('yAxisFormatter')(max), 5, '&nbsp;', 3);
-      }
-      if (series.data.length < series_min_length) {
-        series_min_length = series.data.length;
-      }
-    }.bind(this));
-
-    // All series should have equal length
-    data.forEach(function(series, index) {
-      if (series.data.length > series_min_length) {
-        series.data.length = series_min_length;
-      }
-    });
-  },
-
-  draw: function(seriesData) {
-    var self = this;
-    var isPopup = this.get('isPopup');
-    var p = isPopup ? this.get('popupSuffix') : '';
-
-    this.dataShiftFix(seriesData);
-    this.dataPreProcess(seriesData);
-
-    var chartId = "#" + this.get('id') + "-chart" + p;
-    var chartOverlayId = "#" + this.get('id') + "-container" + p;
-    var xaxisElementId = "#" + this.get('id') + "-xaxis" + p;
-    var yaxisElementId = "#" + this.get('id') + "-yaxis" + p;
-    var legendElementId = "#" + this.get('id') + "-legend" + p;
-
-    var chartElement = document.querySelector(chartId);
-    var overlayElement = document.querySelector(chartOverlayId);
-    var xaxisElement = document.querySelector(xaxisElementId);
-    var yaxisElement = document.querySelector(yaxisElementId);
-    var legendElement = document.querySelector(legendElementId);
-
-    var height = 150;
-    var width = 400;
-    var diff = 32;
-
-    if(this.get('inWidget')) {
-      height = 105; // for widgets view
-      diff = 22;
-    }
-    if (isPopup) {
-      height = 180;
-      width = 670;
-    }
-    else {
-      // If not in popup, the width could vary.
-      // We determine width based on div's size.
-      var thisElement = this.get('element');
-      if (thisElement!=null) {
-        var calculatedWidth = $(thisElement).width();
-        if (calculatedWidth > diff) {
-          width = calculatedWidth - diff;
-        }
-      }
-    }
-
-    var _graph = new Rickshaw.Graph({
-      height: height,
-      width: width,
-      element: chartElement,
-      series: seriesData,
-      interpolation: 'step-after',
-      stroke: true,
-      renderer: this.get('renderer'),
-      strokeWidth: (this.get('renderer') != 'area' ? 2 : 1)
-    });
-
-    if (this.get('renderer') === 'area') {
-      _graph.renderer.unstack = false;
-    }
-
-    new Rickshaw.Graph.Axis.Time({
-      graph: _graph,
-      timeUnit: this.localeTimeUnit(this.get('timeUnitSeconds'))
-    });
-
-    new Rickshaw.Graph.Axis.Y({
-      tickFormat: this.yAxisFormatter,
-      element: yaxisElement,
-      orientation: (isPopup ? 'left' : 'right'),
-      graph: _graph
-    });
-
-    var legend = new Rickshaw.Graph.Legend({
-      graph: _graph,
-      element: legendElement
-    });
-
-    new Rickshaw.Graph.Behavior.Series.Toggle({
-      graph: _graph,
-      legend: legend
-    });
-
-    new Rickshaw.Graph.Behavior.Series.Order({
-      graph: _graph,
-      legend: legend
-    });
-
-    if (!isPopup) {
-      overlayElement.addEventListener('mousemove', function () {
-        $(xaxisElement).removeClass('hide');
-        $(legendElement).removeClass('hide');
-        $(chartElement).children("div").removeClass('hide');
-      });
-      overlayElement.addEventListener('mouseout', function () {
-        $(legendElement).addClass('hide');
-      });
-      _graph.onUpdate(function () {
-        $(legendElement).addClass('hide');
-      });
-    }
-
-    //show the graph when it's loaded
-    _graph.onUpdate(function() {
-      self.set('isReady', true);
-    });
-    _graph.render();
-
-    if (isPopup) {
-      new Rickshaw.Graph.HoverDetail({
-        graph: _graph,
-        yFormatter:function (y) {
-          return self.yAxisFormatter(y);
-        },
-        xFormatter:function (x) {
-          return (new Date(x * 1000)).toLocaleTimeString();
-        },
-        formatter:function (series, x, y, formattedX, formattedY, d) {
-          return formattedY + '<br />' + formattedX;
-        }
-      });
-    }
-
-    _graph = this.updateSeriesInGraph(_graph);
-    if (isPopup) {
-      //show the graph when it's loaded
-      _graph.onUpdate(function() {
-        self.set('isPopupReady', true);
-      });
-      _graph.update();
-
-      var selector = '#'+this.get('id')+'-container'+this.get('popupSuffix');
-      $(selector + ' li.line').click(function() {
-        var series = [];
-        $(selector + ' a.action').each(function(index, v) {
-          series[index] = v.parentNode.classList;
-        });
-        self.set('_seriesProperties', series);
-      });
-
-      this.set('_popupGraph', _graph);
-    }
-    else {
-      _graph.update();
-      var selector = '#'+this.get('id')+'-container';
-      $(selector + ' li.line').click(function() {
-        var series = [];
-        $(selector + ' a.action').each(function(index, v) {
-          series[index] = v.parentNode.classList;
-        });
-        self.set('_seriesPropertiesWidget', series);
-      });
-
-      this.set('_graph', _graph);
-    }
-  },
-
-  /**
-   *
-   * @param {Rickshaw.Graph} graph
-   * @returns {Rickshaw.Graph}
-   */
-  updateSeriesInGraph: function(graph) {
-    var id = this.get('id');
-    var isPopup = this.get('isPopup');
-    var popupSuffix = this.get('popupSuffix');
-    var _series = isPopup ? this.get('_seriesProperties') : this.get('_seriesPropertiesWidget');
-    graph.series.forEach(function(series, index) {
-      if (_series !== null && _series[index] !== null && _series[index] !== undefined ) {
-        if(_series[_series.length - index - 1].length > 1) {
-          var s = '#' + id + '-container' + (isPopup ? popupSuffix : '') + ' a.action:eq(' + (_series.length - index - 1) + ')';
-          $(s).parent('li').addClass('disabled');
-          series.disable();
-        }
-      }
-    });
-    return graph;
-  },
-
-  showGraphInPopup: function() {
-    if(!this.get('hasData')) {
-      return;
-    }
-
-    this.set('isPopup', true);
-    var self = this;
-
-    App.ModalPopup.show({
-      bodyClass: Em.View.extend({
-
-        containerId: null,
-        containerClass: null,
-        yAxisId: null,
-        yAxisClass: null,
-        xAxisId: null,
-        xAxisClass: null,
-        legendId: null,
-        legendClass: null,
-        chartId: null,
-        chartClass: null,
-        titleId: null,
-        titleClass: null,
-
-        isReady: function() {
-          return this.get('parentView.graph.isPopupReady');
-        }.property('parentView.graph.isPopupReady'),
-
-        didInsertElement: function() {
-          $('#modal').addClass('modal-graph-line');
-          var popupSuffix = this.get('parentView.graph.popupSuffix');
-          var id = this.get('parentView.graph.id');
-          var idTemplate = id + '-{element}' + popupSuffix;
-
-          this.set('containerId', idTemplate.replace('{element}', 'container'));
-          this.set('containerClass', 'chart-container' + popupSuffix);
-          this.set('yAxisId', idTemplate.replace('{element}', 'yaxis'));
-          this.set('yAxisClass', this.get('yAxisId').replace(popupSuffix, ''));
-          this.set('xAxisId', idTemplate.replace('{element}', 'xaxis'));
-          this.set('xAxisClass', this.get('xAxisId').replace(popupSuffix, ''));
-          this.set('legendId', idTemplate.replace('{element}', 'legend'));
-          this.set('legendClass', this.get('legendId').replace(popupSuffix, ''));
-          this.set('chartId', idTemplate.replace('{element}', 'chart'));
-          this.set('chartClass', this.get('chartId').replace(popupSuffix, ''));
-          this.set('titleId', idTemplate.replace('{element}', 'title'));
-          this.set('titleClass', this.get('titleId').replace(popupSuffix, ''));
-        },
-
-        templateName: require('templates/common/chart/linear_time'),
-        /**
-         * check is time paging feature is enable for graph
-         */
-        isTimePagingEnable: function() {
-          return !self.get('isTimePagingDisable');
-        }.property(),
-        rightArrowVisible: function() {
-          return (this.get('isReady') && (this.get('parentView.currentTimeIndex') != 0));
-        }.property('isReady', 'parentView.currentTimeIndex'),
-        leftArrowVisible: function() {
-          return (this.get('isReady') && (this.get('parentView.currentTimeIndex') != 7));
-        }.property('isReady', 'parentView.currentTimeIndex')
-      }),
-      header: this.get('title'),
-      /**
-       * App.ChartLinearTimeView
-       */
-      graph: self,
-      secondary: null,
-      onPrimary: function() {
-        this.hide();
-        self.set('isPopup', false);
-        self.set('timeUnitSeconds', 3600);
-      },
-      onClose: function() {
-        this.onPrimary();
-      },
-      /**
-       * move graph back by time
-       * @param event
-       */
-      switchTimeBack: function(event) {
-        var index = this.get('currentTimeIndex');
-        // 7 - number of last time state
-        if(index < 7) {
-          this.reloadGraphByTime(++index);
-        }
-      },
-      /**
-       * move graph forward by time
-       * @param event
-       */
-      switchTimeForward: function(event) {
-        var index = this.get('currentTimeIndex');
-        if(index > 0) {
-          this.reloadGraphByTime(--index);
-        }
-      },
-      /**
-       * reload graph depending on the time
-       * @param index
-       */
-      reloadGraphByTime: function(index) {
-        this.set('currentTimeIndex', index);
-        self.set('timeUnitSeconds', this.get('timeStates')[index].seconds);
-        self.loadData();
-      },
-      timeStates: [
-        {name: Em.I18n.t('graphs.timeRange.hour'), seconds: 3600},
-        {name: Em.I18n.t('graphs.timeRange.twoHours'), seconds: 7200},
-        {name: Em.I18n.t('graphs.timeRange.fourHours'), seconds: 14400},
-        {name: Em.I18n.t('graphs.timeRange.twelveHours'), seconds: 43200},
-        {name: Em.I18n.t('graphs.timeRange.day'), seconds: 86400},
-        {name: Em.I18n.t('graphs.timeRange.week'), seconds: 604800},
-        {name: Em.I18n.t('graphs.timeRange.month'), seconds: 2592000},
-        {name: Em.I18n.t('graphs.timeRange.year'), seconds: 31104000}
-      ],
-      currentTimeIndex: 0,
-      currentTimeState: function() {
-        return this.get('timeStates').objectAt(this.get('currentTimeIndex'));
-      }.property('currentTimeIndex')
-    });
-    Ember.run.next(function() {
-      self.loadData();
-      self.set('isPopupReady', false);
-    });
-  },
-  //60 minute interval on X axis.
-  timeUnitSeconds: 3600
-});
-
-/**
- * A formatter which will turn a number into computer storage sizes of the
- * format '23 GB' etc.
- *
- * @type {Function}
- */
-App.ChartView.BytesFormatter = function (y) {
-  if (y == 0) return '0 B';
-  var value = Rickshaw.Fixtures.Number.formatBase1024KMGTP(y);
-  if (!y || y.length < 1) {
-    value = '0 B';
-  }
-  else {
-    if ("number" == typeof value) {
-      value = String(value);
-    }
-    if ("string" == typeof value) {
-      value = value.replace(/\.\d(\d+)/, function($0, $1){ // Remove only 1-digit after decimal part
-        return $0.replace($1, '');
-      });
-      // Either it ends with digit or ends with character
-      value = value.replace(/(\d$)/, '$1 '); // Ends with digit like '120'
-      value = value.replace(/([a-zA-Z]$)/, ' $1'); // Ends with character like
-      // '120M'
-      value = value + 'B'; // Append B to make B, MB, GB etc.
-    }
-  }
-  return value;
-};
-
-/**
- * A formatter which will turn a number into percentage display like '42%'
- *
- * @type {Function}
- */
-App.ChartView.PercentageFormatter = function (percentage) {
-  var value = percentage;
-  if (!value || value.length < 1) {
-    value = '0 %';
-  } else {
-    value = value.toFixed(3).replace(/0+$/, '').replace(/\.$/, '') + '%';
-  }
-  return value;
-};
-
-/**
- * A formatter which will turn elapsed time into display time like '50 ms',
- * '5s', '10 m', '3 hr' etc. Time is expected to be provided in milliseconds.
- *
- * @type {Function}
- */
-App.ChartView.TimeElapsedFormatter = function (millis) {
-  var value = millis;
-  if (!value || value.length < 1) {
-    value = '0 ms';
-  } else if ("number" == typeof millis) {
-    var seconds = millis > 1000 ? Math.round(millis / 1000) : 0;
-    var minutes = seconds > 60 ? Math.round(seconds / 60) : 0;
-    var hours = minutes > 60 ? Math.round(minutes / 60) : 0;
-    var days = hours > 24 ? Math.round(hours / 24) : 0;
-    if (days > 0) {
-      value = days + ' d';
-    } else if (hours > 0) {
-      value = hours + ' hr';
-    } else if (minutes > 0) {
-      value = minutes + ' m';
-    } else if (seconds > 0) {
-      value = seconds + ' s';
-    } else if (millis > 0) {
-      value = millis.toFixed(3).replace(/0+$/, '').replace(/\.$/, '') + ' ms';
-    } else {
-      value = millis.toFixed(3).replace(/0+$/, '').replace(/\.$/, '') + ' ms';
-    }
-  }
-  return value;
-};
-
-/**
- * The default formatter which uses Rickshaw.Fixtures.Number.formatKMBT
- * which shows 10K, 300M etc.
- *
- * @type {Function}
- */
-App.ChartView.DefaultFormatter = function(y) {
-  if(isNaN(y)){
-    return 0;
-  }
-  var value = Rickshaw.Fixtures.Number.formatKMBT(y);
-  if (value == '') return '0';
-  value = String(value);
-  var c = value[value.length - 1];
-  if (!isNaN(parseInt(c))) {
-    // c is digit
-    value = parseFloat(value).toFixed(3).replace(/0+$/, '').replace(/\.$/, '');
-  }
-  else {
-    // c in not digit
-    value = parseFloat(value.substr(0, value.length - 1)).toFixed(3).replace(/0+$/, '').replace(/\.$/, '') + c;
-  }
-  return value;
-};
-
-
-/**
- * Creates and returns a formatter that can convert a 'value'
- * to 'value units/s'.
- *
- * @param unitsPrefix Prefix which will be used in 'unitsPrefix/s'
- * @param valueFormatter  Value itself will need further processing
- *        via provided formatter. Ex: '10M requests/s'. Generally
- *        should be App.ChartLinearTimeView.DefaultFormatter.
- * @return {Function}
- */
-App.ChartView.CreateRateFormatter = function (unitsPrefix, valueFormatter) {
-  var suffix = " "+unitsPrefix+"/s";
-  return function (value) {
-    value = valueFormatter(value) + suffix;
-    return value;
-  };
-};

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/common/config_set_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/common/config_set_view.js b/contrib/views/slider/src/main/resources/ui/app/views/common/config_set_view.js
deleted file mode 100644
index 388b9ff..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/common/config_set_view.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with this
- * work for additional information regarding copyright ownership. The ASF
- * licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-/**
- * view that display set of configs united into group
- * which can be excluded from/included into general config array via trigger(special config property)
- * @type {Em.View}
- */
-App.ConfigSetView = Ember.View.extend({
-
-  /**
-   * config set data
-   */
-  configSet: null,
-
-  /**
-   * configs which can be included/excluded
-   * @type {Array}
-   */
-  configs: function () {
-    if (this.get('configSet.trigger.value')) {
-      return this.get('configSet.configs');
-    }
-    return [];
-  }.property('configSet.trigger.value'),
-
-  /**
-   * observe change of config values to resolve their dependencies
-   * @method changeConfigValues
-   */
-  changeConfigValues: function () {
-    var configs = this.get('configs');
-    var dependencies = this.get('configSet.dependencies');
-
-    if (configs.length > 0) {
-      dependencies.forEach(function (item) {
-        var origin = configs.findBy('name', item.origin);
-        var dependent = configs.findBy('name', item.dependent);
-        item.mapFunction(origin, dependent);
-      })
-    }
-  }.observes('configs.@each.value')
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/common/filter_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/common/filter_view.js b/contrib/views/slider/src/main/resources/ui/app/views/common/filter_view.js
deleted file mode 100644
index 64f2413..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/common/filter_view.js
+++ /dev/null
@@ -1,370 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Wrapper View for all filter components. Layout template and common actions are located inside of it.
- * Logic specific for data component(input, select, or custom multi select, which fire any changes on interface) are
- * located in inner view - <code>filterView</code>.
- *
- * If we want to have input filter, put <code>textFieldView</code> to it.
- * All inner views implemented below this view.
- * @type {*}
- */
-
-var App = require('config/app');
-
-var wrapperView = Ember.View.extend({
-  classNames: ['view-wrapper'],
-  layout: Ember.Handlebars.compile('<a href="#" {{action "clearFilter" target="view"}} class="ui-icon ui-icon-circle-close"></a> {{yield}}'),
-  template: Ember.Handlebars.compile(
-    '{{#if view.fieldId}}<input type="hidden" id="{{unbound view.fieldId}}" value="" />{{/if}}' +
-    '{{view view.filterView}}' +
-    '{{#if view.showApply}}<button {{action "setValueOnApply" target="view"}} class="apply-btn btn"><span>Apply</span></button>{{/if}} '
-  ),
-
-  value: null,
-
-  /**
-   * Column index
-   */
-  column: null,
-
-  /**
-   * If this field is exists we dynamically create hidden input element and set value there.
-   * Used for some cases, where this values will be used outside of component
-   */
-  fieldId: null,
-
-  clearFilter: function(){
-    this.set('value', this.get('emptyValue'));
-    if(this.get('setPropertyOnApply')){
-      this.setValueOnApply();
-    }
-    return false;
-  },
-
-  setValueOnApply: function() {
-    if(this.get('value') == null){
-      this.set('value', '')
-    }
-    this.set(this.get('setPropertyOnApply'), this.get('value'));
-    return false;
-  },
-
-  /**
-   * Use to determine whether filter is clear or not. Also when we want to set empty value
-   */
-  emptyValue: '',
-
-  /**
-   * Whether our <code>value</code> is empty or not
-   * @return {Boolean}
-   */
-  isEmpty: function(){
-    if(this.get('value') === null || this.get('value') == this.get('defaultValue')){
-      return true;
-    }
-    return this.get('value').toString() === this.get('emptyValue').toString();
-  },
-
-  /**
-   * Show/Hide <code>Clear filter</code> button.
-   * Also this method updates computed field related to <code>fieldId</code> if it exists.
-   * Call <code>onChangeValue</code> callback when everything is done.
-   */
-  showClearFilter: function(){
-    if(!this.get('parentNode')){
-      return;
-    }
-    // get the sort view element in the same column to current filter view to highlight them together
-    var relatedSort = $(this.get('element')).parents('thead').find('.sort-view-' + this.get('column'));
-    if(this.isEmpty()){
-      this.get('parentNode').removeClass('active-filter');
-      this.get('parentNode').addClass('notActive');
-      relatedSort.removeClass('active-sort');
-    } else {
-      this.get('parentNode').removeClass('notActive');
-      this.get('parentNode').addClass('active-filter');
-      relatedSort.addClass('active-sort');
-    }
-
-    if(this.get('fieldId')){
-      this.$('> input').eq(0).val(this.get('value'));
-    }
-
-    this.onChangeValue();
-  }.observes('value'),
-
-  /**
-   * Callback for value changes
-   */
-  onChangeValue: function(){
-
-  },
-
-  /**
-   * Filter components is located here. Should be redefined
-   */
-  filterView: Em.View,
-
-  /**
-   * Update class of parentNode(hide clear filter button) on page load
-   */
-  didInsertElement: function(){
-    var parent = this.$().parent();
-    this.set('parentNode', parent);
-    parent.addClass('notActive');
-  }
-});
-
-/**
- * Simple input control for wrapperView
- */
-var textFieldView = Ember.TextField.extend({
-  type:'text',
-  placeholder: Em.I18n.t('any'),
-  valueBinding: "parentView.value"
-});
-
-/**
- * Simple multiselect control for wrapperView.
- * Used to render blue button and popup, which opens on button click.
- * All content related logic should be implemented manually outside of it
- */
-var componentFieldView = Ember.View.extend({
-  classNames: ['btn-group'],
-  classNameBindings: ['isFilterOpen:open:'],
-
-  /**
-   * Whether popup is shown or not
-   */
-  isFilterOpen: false,
-
-  /**
-   * We have <code>value</code> property similar to inputs <code>value</code> property
-   */
-  valueBinding: 'parentView.value',
-
-  /**
-   * Clear filter to initial state
-   */
-  clearFilter: function(){
-    this.set('value', '');
-  },
-
-  /**
-   * Onclick handler for <code>cancel filter</code> button
-   */
-  closeFilter:function () {
-    $(document).unbind('click');
-    this.set('isFilterOpen', false);
-  },
-
-  /**
-   * Onclick handler for <code>apply filter</code> button
-   */
-  applyFilter:function() {
-    this.closeFilter();
-  },
-
-  /**
-   * Onclick handler for <code>show component filter</code> button.
-   * Also this function is used in some other places
-   */
-  clickFilterButton:function () {
-    var self = this;
-    this.set('isFilterOpen', !this.get('isFilterOpen'));
-    if (this.get('isFilterOpen')) {
-
-      var dropDown = this.$('.filter-components');
-      var firstClick = true;
-      $(document).bind('click', function (e) {
-        if (!firstClick && $(e.target).closest(dropDown).length == 0) {
-          self.set('isFilterOpen', false);
-          $(document).unbind('click');
-        }
-        firstClick = false;
-      });
-    }
-  }
-});
-
-/**
- * Simple select control for wrapperView
- */
-var selectFieldView = Ember.Select.extend({
-  selectionBinding: 'parentView.value',
-  contentBinding: 'parentView.content'
-});
-
-/**
- * Result object, which will be accessible outside
- * @type {Object}
- */
-module.exports = {
-  /**
-   * You can access wrapperView outside
-   */
-  wrapperView : wrapperView,
-
-  /**
-   * And also controls views if need it
-   */
-  textFieldView : textFieldView,
-  selectFieldView: selectFieldView,
-  componentFieldView: componentFieldView,
-
-  /**
-   * Quick create input filters
-   * @param config parameters of <code>wrapperView</code>
-   */
-  createTextView : function(config){
-    config.fieldType = config.fieldType || 'input-medium';
-    config.filterView = textFieldView.extend({
-      classNames : [ config.fieldType ]
-    });
-
-    return wrapperView.extend(config);
-  },
-
-  /**
-   * Quick create multiSelect filters
-   * @param config parameters of <code>wrapperView</code>
-   */
-  createComponentView : function(config){
-    config.clearFilter = function(){
-      this.forEachChildView(function(item){
-        if(item.clearFilter){
-          item.clearFilter();
-        }
-      });
-      return false;
-    };
-
-    return wrapperView.extend(config);
-  },
-
-  /**
-   * Quick create select filters
-   * @param config parameters of <code>wrapperView</code>
-   */
-  createSelectView: function(config){
-
-    config.fieldType = config.fieldType || 'input-medium';
-    config.filterView = selectFieldView.extend({
-      classNames : [ config.fieldType ],
-      attributeBindings: ['disabled','multiple'],
-      disabled: false
-    });
-    config.emptyValue = config.emptyValue || Em.I18n.t('any');
-
-    return wrapperView.extend(config);
-  },
-  /**
-   * returns the filter function, which depends on the type of property
-   * @param type
-   * @param isGlobal check is search global
-   * @return {Function}
-   */
-  getFilterByType: function(type, isGlobal){
-    switch (type){
-      case 'boolean':
-        return function (origin, compareValue){
-          return origin === compareValue;
-        };
-        break;
-      case 'date':
-        return function (rowValue, rangeExp) {
-          var match = false;
-          var timePassed = new Date().getTime() - new Date(rowValue).getTime();
-          switch (rangeExp) {
-            case 'Past 1 hour':
-              match = timePassed <= 3600000;
-              break;
-            case 'Past 1 Day':
-              match = timePassed <= 86400000;
-              break;
-            case 'Past 2 Days':
-              match = timePassed <= 172800000;
-              break;
-            case 'Past 7 Days':
-              match = timePassed <= 604800000;
-              break;
-            case 'Past 14 Days':
-              match = timePassed <= 1209600000;
-              break;
-            case 'Past 30 Days':
-              match = timePassed <= 2592000000;
-              break;
-            case 'Any':
-              match = true;
-              break;
-          }
-          return match;
-        };
-        break;
-      case 'number':
-        return function(rowValue, rangeExp){
-          var compareChar = rangeExp.charAt(0);
-          var compareValue;
-          var match = false;
-          if (rangeExp.length == 1) {
-            if (isNaN(parseInt(compareChar))) {
-              // User types only '=' or '>' or '<', so don't filter column values
-              match = true;
-              return match;
-            }
-            else {
-              compareValue = parseFloat(parseFloat(rangeExp).toFixed(2));
-            }
-          }
-          else {
-            if (isNaN(parseInt(compareChar))) {
-              compareValue = parseFloat(parseFloat(rangeExp.substr(1, rangeExp.length)).toFixed(2));
-            }
-            else {
-              compareValue = parseFloat(parseFloat(rangeExp.substr(0, rangeExp.length)).toFixed(2));
-            }
-          }
-          rowValue = parseFloat((jQuery(rowValue).text()) ? jQuery(rowValue).text() : rowValue);
-          match = false;
-          switch (compareChar) {
-            case '<':
-              if (compareValue > rowValue) match = true;
-              break;
-            case '>':
-              if (compareValue < rowValue) match = true;
-              break;
-            case '=':
-              if (compareValue == rowValue) match = true;
-              break;
-            default:
-              if (rangeExp == rowValue) match = true;
-          }
-          return match;
-        };
-        break;
-      case 'string':
-      default:
-        return function(origin, compareValue){
-          var regex = new RegExp(compareValue,"i");
-          return regex.test(origin);
-        }
-    }
-  }
-};

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/common/sort_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/common/sort_view.js b/contrib/views/slider/src/main/resources/ui/app/views/common/sort_view.js
deleted file mode 100644
index acce22a..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/common/sort_view.js
+++ /dev/null
@@ -1,206 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('config/app');
-
-/**
- * Wrapper View for all sort components. Layout template and common actions are located inside of it.
- * Logic specific for sort fields
- * located in inner view - <code>fieldView</code>.
- *
- * @type {*}
- */
-var wrapperView = Em.View.extend({
-  tagName: 'tr',
-
-  classNames: ['sort-wrapper'],
-
-  willInsertElement:function () {
-    if(this.get('parentView.tableFilteringComplete')){
-      this.get('parentView').set('filteringComplete', true);
-    }
-  },
-
-  /**
-   * Load sort statuses from local storage
-   * Works only after finish filtering in the parent View
-   */
-  loadSortStatuses: function() {
-    var statuses = App.db.getSortingStatuses(this.get('controller.name'));
-    if (!this.get('parentView.filteringComplete')) return;
-    if (statuses) {
-      var childViews = this.get('childViews');
-      var self = this;
-      statuses.forEach(function(st) {
-        if (st.status != 'sorting') {
-          var sortOrder = false;
-          if(st.status == 'sorting_desc') {
-            sortOrder = true;
-          }
-          self.sort(childViews.findProperty('name', st.name), sortOrder);
-          childViews.findProperty('name', st.name).set('status', (sortOrder)?'sorting_desc':'sorting_asc');
-          self.get('controller').set('sortingColumn', childViews.findProperty('name', st.name));
-        }
-        else {
-          childViews.findProperty('name', st.name).set('status', st.status);
-        }
-      });
-    }
-    this.get('parentView').showProperPage();
-  }.observes('parentView.filteringComplete'),
-
-  /**
-   * Save sort statuses to local storage
-   * Works only after finish filtering in the parent View
-   */
-  saveSortStatuses: function() {
-    if (!this.get('parentView.filteringComplete')) return;
-    var statuses = [];
-    this.get('childViews').forEach(function(childView) {
-      statuses.push({
-        name: childView.get('name'),
-        status: childView.get('status')
-      });
-    });
-    App.db.setSortingStatuses(this.get('controller.name'), statuses);
-  }.observes('childViews.@each.status'),
-
-  /**
-   * sort content by property
-   * @param property
-   * @param order true - DESC, false - ASC
-   */
-  sort: function(property, order, returnSorted){
-    returnSorted = returnSorted ? true : false;
-    var content = this.get('content').toArray();
-    var sortFunc = this.getSortFunc(property, order);
-    this.resetSort();
-    content.sort(sortFunc);
-    if(returnSorted){
-      return content;
-    }else{
-      this.set('content', content);
-    }
-  },
-
-  isSorting: false,
-
-  onContentChange: function () {
-    if (!this.get('isSorting') && this.get('content.length')) {
-      this.get('childViews').forEach(function (view) {
-        if (view.status !== 'sorting') {
-          var status = view.get('status');
-          this.set('isSorting', true);
-          this.sort(view, status == 'sorting_desc');
-          this.set('isSorting', false);
-          view.set('status', status);
-        }
-      }, this);
-    }
-  }.observes('content.length'),
-
-  /**
-   * reset all sorts fields
-   */
-  resetSort: function(){
-    this.get('childViews').setEach('status', 'sorting');
-  },
-  /**
-   * determines sort function depending on the type of sort field
-   * @param property
-   * @param order
-   * @return {*}
-   */
-  getSortFunc: function(property, order){
-    var func;
-    switch (property.get('type')){
-      case 'number':
-        func = function (a, b) {
-          var a = parseFloat(Em.get(a, property.get('name')));
-          var b = parseFloat(Em.get(b, property.get('name')));
-          if (order) {
-            return b - a;
-          } else {
-            return a - b;
-          }
-        };
-        break;
-      default:
-        func = function(a,b){
-          if(order){
-            if (Em.get(a, property.get('name')) > Em.get(b, property.get('name')))
-              return -1;
-            if (Em.get(a, property.get('name')) < Em.get(b, property.get('name')))
-              return 1;
-            return 0;
-          } else {
-            if (Em.get(a, property.get('name')) < Em.get(b, property.get('name')))
-              return -1;
-            if (Em.get(a, property.get('name')) > Em.get(b, property.get('name')))
-              return 1;
-            return 0;
-          }
-        }
-    }
-    return func;
-  }
-});
-/**
- * particular view that contain sort field properties:
- * name - name of property in content table
- * type(optional) - specific type to sort
- * displayName - label to display
- * @type {*}
- */
-var fieldView = Em.View.extend({
-  template:Em.Handlebars.compile('<span {{bind-attr class="view.status :column-name"}}>{{view.displayName}}</span>'),
-  classNameBindings: ['viewNameClass'],
-  tagName: 'th',
-  name: null,
-  displayName: null,
-  status: 'sorting',
-  viewNameClass: function () {
-    return 'sort-view-' + this.get('column');
-  }.property(),
-  type: null,
-  column: 0,
-  /**
-   * callback that run sorting and define order of sorting
-   * @param event
-   */
-  click: function(event){
-    if(this.get('status') === 'sorting_desc'){
-      this.get('parentView').sort(this, false);
-      this.set('status', 'sorting_asc');
-    }
-    else {
-      this.get('parentView').sort(this, true);
-      this.set('status', 'sorting_desc');
-    }
-    this.get('controller').set('sortingColumn', this);
-  }
-});
-
-/**
- * Result object, which will be accessible outside
- * @type {Object}
- */
-module.exports = {
-  wrapperView: wrapperView,
-  fieldView: fieldView
-};
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/common/table_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/common/table_view.js b/contrib/views/slider/src/main/resources/ui/app/views/common/table_view.js
deleted file mode 100644
index fb70633..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/common/table_view.js
+++ /dev/null
@@ -1,418 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('config/app');
-var filters = require('views/common/filter_view');
-var sort = require('views/common/sort_view');
-
-App.TableView = Em.View.extend({
-
-  /**
-   * Defines to show pagination or show all records
-   * @type {Boolean}
-   */
-  pagination: true,
-
-  /**
-   * Shows if all data is loaded and filtered
-   * @type {Boolean}
-   */
-  filteringComplete: false,
-
-  /**
-   * intermediary for filteringComplete
-   * @type {Boolean}
-   */
-  tableFilteringComplete: false,
-
-  /**
-   * Loaded from local storage startIndex value
-   * @type {Number}
-   */
-  startIndexOnLoad: null,
-
-  /**
-   * Loaded from server persist value
-   * @type {Number}
-   */
-  displayLengthOnLoad: null,
-
-  /**
-   * The number of rows to show on every page
-   * The value should be a number converted into string type in order to support select element API
-   * Example: "10", "25"
-   * @type {String}
-   */
-  displayLength: null,
-
-  /**
-   * default value of display length
-   * The value should be a number converted into string type in order to support select element API
-   * Example: "10", "25"
-   */
-  defaultDisplayLength: "10",
-
-  /**
-   * Persist-key of current table displayLength property
-   * @param {String} loginName current user login name
-   * @returns {String}
-   */
-  displayLengthKey: function (loginName) {
-    if (App.get('testMode')) {
-      return 'pagination_displayLength';
-    }
-    loginName = loginName ? loginName : App.router.get('loginName');
-    return this.get('controller.name') + '-pagination-displayLength-' + loginName;
-  },
-
-  /**
-   * Set received from server value to <code>displayLengthOnLoad</code>
-   * @param {Number} response
-   * @param {Object} request
-   * @param {Object} data
-   * @returns {*}
-   */
-  getUserPrefSuccessCallback: function (response, request, data) {
-    console.log('Got DisplayLength value from server with key ' + data.key + '. Value is: ' + response);
-    this.set('displayLengthOnLoad', response);
-    return response;
-  },
-
-  /**
-   * Set default value to <code>displayLengthOnLoad</code> (and send it on server) if value wasn't found on server
-   * @returns {Number}
-   */
-  getUserPrefErrorCallback: function () {
-    // this user is first time login
-    console.log('Persist did NOT find the key');
-    var displayLengthDefault = this.get('defaultDisplayLength');
-    this.set('displayLengthOnLoad', displayLengthDefault);
-    if (App.get('isAdmin')) {
-      this.postUserPref(this.displayLengthKey(), displayLengthDefault);
-    }
-    return displayLengthDefault;
-  },
-
-  /**
-   * Do pagination after filtering and sorting
-   * Don't call this method! It's already used where it's need
-   */
-  showProperPage: function() {
-    var self = this;
-    Em.run.next(function() {
-      Em.run.next(function() {
-        if(self.get('startIndexOnLoad')) {
-          self.set('startIndex', self.get('startIndexOnLoad'));
-        }
-      });
-    });
-  },
-
-  /**
-   * Return pagination information displayed on the page
-   * @type {String}
-   */
-  paginationInfo: function () {
-    return Em.I18n.t('tableView.filters.paginationInfo').format(this.get('startIndex'), this.get('endIndex'), this.get('filteredContent.length'));
-  }.property('displayLength', 'filteredContent.length', 'startIndex', 'endIndex'),
-
-  paginationLeft: Ember.View.extend({
-    tagName: 'a',
-    template: Ember.Handlebars.compile('<i class="icon-arrow-left"></i>'),
-    classNameBindings: ['class'],
-    class: function () {
-      if (this.get("parentView.startIndex") > 1) {
-        return "paginate_previous";
-      }
-      return "paginate_disabled_previous";
-    }.property("parentView.startIndex", 'filteredContent.length'),
-
-    click: function () {
-      if (this.get('class') === "paginate_previous") {
-        this.get('parentView').previousPage();
-      }
-    }
-  }),
-
-  paginationRight: Ember.View.extend({
-    tagName: 'a',
-    template: Ember.Handlebars.compile('<i class="icon-arrow-right"></i>'),
-    classNameBindings: ['class'],
-    class: function () {
-      if ((this.get("parentView.endIndex")) < this.get("parentView.filteredContent.length")) {
-        return "paginate_next";
-      }
-      return "paginate_disabled_next";
-    }.property("parentView.endIndex", 'filteredContent.length'),
-
-    click: function () {
-      if (this.get('class') === "paginate_next") {
-        this.get('parentView').nextPage();
-      }
-    }
-  }),
-
-  paginationFirst: Ember.View.extend({
-    tagName: 'a',
-    template: Ember.Handlebars.compile('<i class="icon-step-backward"></i>'),
-    classNameBindings: ['class'],
-    class: function () {
-      if ((this.get("parentView.endIndex")) > parseInt(this.get("parentView.displayLength"))) {
-        return "paginate_previous";
-      }
-      return "paginate_disabled_previous";
-    }.property("parentView.endIndex", 'filteredContent.length'),
-
-    click: function () {
-      if (this.get('class') === "paginate_previous") {
-        this.get('parentView').firstPage();
-      }
-    }
-  }),
-
-  paginationLast: Ember.View.extend({
-    tagName: 'a',
-    template: Ember.Handlebars.compile('<i class="icon-step-forward"></i>'),
-    classNameBindings: ['class'],
-    class: function () {
-      if (this.get("parentView.endIndex") !== this.get("parentView.filteredContent.length")) {
-        return "paginate_next";
-      }
-      return "paginate_disabled_next";
-    }.property("parentView.endIndex", 'filteredContent.length'),
-
-    click: function () {
-      if (this.get('class') === "paginate_next") {
-        this.get('parentView').lastPage();
-      }
-    }
-  }),
-
-  /**
-   * Select View with list of "rows-per-page" options
-   * @type {Ember.View}
-   */
-  rowsPerPageSelectView: Em.Select.extend({
-    content: ['10', '25', '50', '100'],
-    change: function () {
-      this.get('parentView').saveDisplayLength();
-    }
-  }),
-
-  saveDisplayLength: function() {
-    var self = this;
-    Em.run.next(function() {
-      if (!App.testMode) {
-        if (App.get('isAdmin')) {
-          self.postUserPref(self.displayLengthKey(), self.get('displayLength'));
-        }
-      }
-    });
-  },
-  /**
-   * Start index for displayed content on the page
-   */
-  startIndex: 1,
-
-  /**
-   * Calculate end index for displayed content on the page
-   */
-  endIndex: function () {
-    if (this.get('pagination')) {
-      return Math.min(this.get('filteredContent.length'), this.get('startIndex') + parseInt(this.get('displayLength')) - 1);
-    } else {
-      return this.get('filteredContent.length')
-    }
-  }.property('startIndex', 'displayLength', 'filteredContent.length'),
-
-  /**
-   * Onclick handler for previous page button on the page
-   */
-  previousPage: function () {
-    var result = this.get('startIndex') - parseInt(this.get('displayLength'));
-    this.set('startIndex', (result < 2) ? 1 : result);
-  },
-
-  /**
-   * Onclick handler for next page button on the page
-   */
-  nextPage: function () {
-    var result = this.get('startIndex') + parseInt(this.get('displayLength'));
-    if (result - 1 < this.get('filteredContent.length')) {
-      this.set('startIndex', result);
-    }
-  },
-  /**
-   * Onclick handler for first page button on the page
-   */
-  firstPage: function () {
-    this.set('startIndex', 1);
-  },
-  /**
-   * Onclick handler for last page button on the page
-   */
-  lastPage: function () {
-    var pagesCount = this.get('filteredContent.length') / parseInt(this.get('displayLength'));
-    var startIndex = (this.get('filteredContent.length') % parseInt(this.get('displayLength')) === 0) ?
-      (pagesCount - 1) * parseInt(this.get('displayLength')) :
-      Math.floor(pagesCount) * parseInt(this.get('displayLength'));
-    this.set('startIndex', ++startIndex);
-  },
-
-  /**
-   * Calculates default value for startIndex property after applying filter or changing displayLength
-   */
-  updatePaging: function (controller, property) {
-    var displayLength = this.get('displayLength');
-    var filteredContentLength = this.get('filteredContent.length');
-    if (property == 'displayLength') {
-      this.set('startIndex', Math.min(1, filteredContentLength));
-    } else if (!filteredContentLength) {
-      this.set('startIndex', 0);
-    } else if (this.get('startIndex') > filteredContentLength) {
-      this.set('startIndex', Math.floor((filteredContentLength - 1) / displayLength) * displayLength + 1);
-    } else if (!this.get('startIndex')) {
-      this.set('startIndex', 1);
-    }
-  }.observes('displayLength', 'filteredContent.length'),
-
-  /**
-   * Apply each filter to each row
-   *
-   * @param {Number} iColumn number of column by which filter
-   * @param {Object} value
-   * @param {String} type
-   * @param {String} defaultValue
-   */
-  updateFilter: function (iColumn, value, type, defaultValue) {
-    var filterCondition = this.get('filterConditions').findProperty('iColumn', iColumn);
-    defaultValue = defaultValue ? defaultValue : "";
-    if (filterCondition) {
-      filterCondition.value = value;
-    }
-    else {
-      filterCondition = {
-        iColumn: iColumn,
-        value: value,
-        type: type,
-        defaultValue: defaultValue
-      };
-      this.get('filterConditions').push(filterCondition);
-    }
-    this.filtersUsedCalc();
-    this.filter();
-  },
-
-
-  /**
-   * Contain filter conditions for each column
-   * @type {Array}
-   */
-  filterConditions: [],
-
-  /**
-   * Contains content after implementing filters
-   * @type {Array}
-   */
-  filteredContent: [],
-
-  /**
-   * Determine if <code>filteredContent</code> is empty or not
-   * @type {Boolean}
-   */
-  hasFilteredItems: function() {
-    return !!this.get('filteredContent.length');
-  }.property('filteredContent.length'),
-
-  /**
-   * Contains content to show on the current page of data page view
-   * @type {Array}
-   */
-  pageContent: function () {
-    return this.get('filteredContent').slice(this.get('startIndex') - 1, this.get('endIndex'));
-  }.property('filteredContent.length', 'startIndex', 'endIndex'),
-
-  /**
-   * Filter table by filterConditions
-   */
-  filter: function () {
-    var content = this.get('content');
-    var filterConditions = this.get('filterConditions').filterProperty('value');
-    var result;
-    var assoc = this.get('colPropAssoc');
-    if (filterConditions.length) {
-      result = content.filter(function (item) {
-        var match = true;
-        filterConditions.forEach(function (condition) {
-          var filterFunc = filters.getFilterByType(condition.type, false);
-          if (match && condition.value != condition.defaultValue) {
-            match = filterFunc(Em.get(item, assoc[condition.iColumn]), condition.value);
-          }
-        });
-        return match;
-      });
-      this.set('filteredContent', result);
-    } else {
-      this.set('filteredContent', content.toArray());
-    }
-  }.observes('content.length'),
-
-  /**
-   * Does any filter is used on the page
-   * @type {Boolean}
-   */
-  filtersUsed: false,
-
-  /**
-   * Determine if some filters are used on the page
-   * Set <code>filtersUsed</code> value
-   */
-  filtersUsedCalc: function() {
-    var filterConditions = this.get('filterConditions');
-    if (!filterConditions.length) {
-      this.set('filtersUsed', false);
-      return;
-    }
-    var filtersUsed = false;
-    filterConditions.forEach(function(filterCondition) {
-      if (filterCondition.value.toString() !== '' && filterCondition.value.toString() !== filterCondition.defaultValue.toString()) {
-        filtersUsed = true;
-      }
-    });
-    this.set('filtersUsed', filtersUsed);
-  },
-
-  /**
-   * Run <code>clearFilter</code> in the each child filterView
-   */
-  clearAllFilters: function() {
-    this.set('filterConditions', []);
-    this.get('_childViews').forEach(function(childView) {
-      if (childView['clearFilter']) {
-        childView.clearFilter();
-      }
-    });
-  },
-
-  actions: {
-    clearFilters: function() {
-      return this.clearAllFilters();
-    }
-  }
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/createAppWizard/step1_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/createAppWizard/step1_view.js b/contrib/views/slider/src/main/resources/ui/app/views/createAppWizard/step1_view.js
deleted file mode 100644
index e6f6642..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/createAppWizard/step1_view.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.CreateAppWizardStep1View = Ember.View.extend({
-
-  radioButton: Ember.TextField.extend({
-
-    tagName: "input",
-
-    type: "radio",
-
-    attributeBindings: ["name", "type", "value", "checked:checked:"],
-
-    click: function () {
-      this.set("selection", this.get('value'));
-    },
-
-    checked: function () {
-      return this.get("value") == this.get("selection");
-    }.property()
-
-  }),
-
-  /**
-   * Enable "Special-label" text-field only when "spec-label"-radio is checked
-   * @type {bool}
-   */
-  specLabelEnabled: Ember.computed.lt('controller.newApp.selectedYarnLabel', '2'),
-
-  noAppsAvailableSelect: [Em.I18n.t('slider.apps.no.applications.available')]
-
-});


[42/42] ambari git commit: Merge branch 'trunk' into branch-feature-AMBARI-20859

Posted by rl...@apache.org.
Merge branch 'trunk' into branch-feature-AMBARI-20859


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/fd322009
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/fd322009
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/fd322009

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: fd3220099abd7e990dc18fa9ff9b2758554bb2cf
Parents: f760516 0dbc797
Author: Robert Levas <rl...@hortonworks.com>
Authored: Fri Jun 23 09:28:38 2017 -0400
Committer: Robert Levas <rl...@hortonworks.com>
Committed: Fri Jun 23 09:28:38 2017 -0400

----------------------------------------------------------------------
 .../ambari-metrics/datasource.js                |     5 +-
 .../actionmanager/ActionDBAccessorImpl.java     |    17 +
 .../apache/ambari/server/orm/DBAccessor.java    |    41 +-
 .../ambari/server/orm/DBAccessorImpl.java       |   113 +-
 .../server/orm/helpers/dbms/DbmsHelper.java     |    10 +
 .../orm/helpers/dbms/GenericDbmsHelper.java     |    12 +
 .../server/orm/helpers/dbms/H2Helper.java       |    10 +
 .../server/upgrade/UpgradeCatalog251.java       |     3 +-
 .../ambari/server/orm/DBAccessorImplTest.java   |    62 +
 ambari-web/app/messages.js                      |    34 +-
 ambari-web/app/styles/alerts.less               |    52 +-
 ambari-web/app/styles/application.less          |    91 +-
 ambari-web/app/styles/bootstrap_overrides.less  |    18 +-
 ambari-web/app/styles/dashboard.less            |     9 +-
 .../app/styles/enhanced_service_dashboard.less  |    79 +-
 .../templates/common/export_metrics_menu.hbs    |    16 +-
 .../templates/common/widget/gauge_widget.hbs    |    33 +-
 .../templates/common/widget/graph_widget.hbs    |    44 +-
 .../templates/common/widget/number_widget.hbs   |    33 +-
 .../templates/common/widget/template_widget.hbs |    35 +-
 .../main/dashboard/widgets/cluster_metrics.hbs  |    19 +-
 .../app/templates/main/service/info/summary.hbs |    91 +-
 .../main/service/info/summary/base.hbs          |    13 +-
 .../service/info/summary/client_components.hbs  |    10 +-
 .../service/info/summary/master_components.hbs  |    26 +-
 .../service/info/summary/slave_components.hbs   |    12 +-
 ambari-web/app/templates/main/service/item.hbs  |    40 +-
 .../templates/main/service/services/hbase.hbs   |   128 +-
 .../templates/main/service/services/hdfs.hbs    |   270 +-
 .../templates/main/service/services/hive.hbs    |    13 +-
 .../templates/main/service/services/ranger.hbs  |    59 +-
 .../templates/main/service/services/storm.hbs   |   118 +-
 .../templates/main/service/services/yarn.hbs    |   194 +-
 .../app/views/common/quick_view_link_view.js    |    14 +-
 .../views/common/widget/gauge_widget_view.js    |    14 +-
 .../app/views/main/service/info/summary.js      |    24 +
 ambari-web/app/views/main/service/service.js    |    13 +-
 .../app/views/main/service/services/hbase.js    |     2 +-
 .../app/views/main/service/services/hdfs.js     |    19 +-
 .../app/views/main/service/services/yarn.js     |     3 +-
 .../common/widget/gauge_widget_view_test.js     |     2 +-
 .../src/main/resources/ui/app/styles/app.scss   |     1 +
 contrib/views/pom.xml                           |     1 -
 contrib/views/slider/docs/index.md              |   164 -
 contrib/views/slider/gzip-content.cmd           |    17 -
 contrib/views/slider/gzip-content.ps1           |    81 -
 contrib/views/slider/pom.xml                    |   463 -
 .../apache/ambari/view/slider/AlertField.java   |    62 -
 .../apache/ambari/view/slider/AlertState.java   |    40 -
 .../ambari/view/slider/MetricsHolder.java       |    44 -
 .../apache/ambari/view/slider/SliderApp.java    |   198 -
 .../ambari/view/slider/SliderAppComponent.java  |    62 -
 .../ambari/view/slider/SliderAppType.java       |   107 -
 .../view/slider/SliderAppTypeComponent.java     |   103 -
 .../slider/SliderAppTypesResourceProvider.java  |    94 -
 .../ambari/view/slider/SliderAppsAlerts.java    |   127 -
 .../view/slider/SliderAppsConfiguration.java    |    52 -
 .../view/slider/SliderAppsResourceProvider.java |   124 -
 .../view/slider/SliderAppsViewController.java   |   112 -
 .../slider/SliderAppsViewControllerImpl.java    |  1510 -
 .../apache/ambari/view/slider/TemporalInfo.java |    48 -
 .../apache/ambari/view/slider/ViewStatus.java   |    72 -
 .../view/slider/clients/AmbariClient.java       |    58 -
 .../view/slider/clients/AmbariCluster.java      |    52 -
 .../view/slider/clients/AmbariClusterInfo.java  |    40 -
 .../slider/clients/AmbariHostComponent.java     |    49 -
 .../view/slider/clients/AmbariHostInfo.java     |    32 -
 .../view/slider/clients/AmbariService.java      |    36 -
 .../view/slider/clients/AmbariServiceInfo.java  |    51 -
 .../slider/rest/SliderAppTypesResource.java     |    54 -
 .../view/slider/rest/SliderAppsResource.java    |   163 -
 .../view/slider/rest/ViewStatusResource.java    |    40 -
 .../slider/rest/client/AmbariHttpClient.java    |   233 -
 .../view/slider/rest/client/BaseHttpClient.java |   157 -
 .../slider/rest/client/JMXMetricHolder.java     |    50 -
 .../ambari/view/slider/rest/client/Metric.java  |   158 -
 .../slider/rest/client/SliderAppJmxHelper.java  |   205 -
 .../rest/client/SliderAppMasterClient.java      |   324 -
 .../rest/client/SliderAppMetricsHelper.java     |   159 -
 .../view/slider/rest/client/TimelineMetric.java |   172 -
 .../slider/rest/client/TimelineMetrics.java     |   101 -
 .../rest/client/URLStreamProviderBasicAuth.java |   105 -
 .../slider/src/main/resources/slider.properties |    19 -
 .../slider/src/main/resources/ui/.gitignore     |    31 -
 .../views/slider/src/main/resources/ui/LICENSE  |    21 -
 .../slider/src/main/resources/ui/README.md      |   122 -
 .../src/main/resources/ui/app/assets/404.html   |   175 -
 .../app/assets/apple-touch-icon-precomposed.png |   Bin 1226 -> 0 bytes
 .../resources/ui/app/assets/crossdomain.xml     |    31 -
 .../resources/ui/app/assets/data/apps/apps.json |  1320 -
 .../ui/app/assets/data/apptypes/all_fields.json |   642 -
 .../ui/app/assets/data/metrics/metric.json      |   946 -
 .../ui/app/assets/data/metrics/metric2.json     |  3838 --
 .../ui/app/assets/data/metrics/metric3.json     |  1856 -
 .../ui/app/assets/data/metrics/metric4.json     |   968 -
 .../ui/app/assets/data/resource/empty_json.json |     1 -
 .../data/resource/slider-properties-2.json      |     9 -
 .../assets/data/resource/slider-properties.json |   148 -
 .../app/assets/data/resource/status_false.json  |     8 -
 .../app/assets/data/resource/status_true.json   |     5 -
 .../main/resources/ui/app/assets/favicon.ico    |   Bin 766 -> 0 bytes
 .../ui/app/assets/font/fontawesome-webfont.eot  |   Bin 37405 -> 0 bytes
 .../ui/app/assets/font/fontawesome-webfont.svg  |   399 -
 .../ui/app/assets/font/fontawesome-webfont.ttf  |   Bin 79076 -> 0 bytes
 .../ui/app/assets/font/fontawesome-webfont.woff |   Bin 43572 -> 0 bytes
 .../resources/ui/app/assets/images/.gitkeep     |     0
 .../ui-bg_flat_0_aaaaaa_40x100.png              |   Bin 180 -> 0 bytes
 .../ui-bg_glass_55_fbf9ee_1x400.png             |   Bin 120 -> 0 bytes
 .../ui-bg_glass_65_ffffff_1x400.png             |   Bin 105 -> 0 bytes
 .../ui-bg_glass_75_dadada_1x400.png             |   Bin 111 -> 0 bytes
 .../ui-bg_glass_75_e6e6e6_1x400.png             |   Bin 110 -> 0 bytes
 .../ui-bg_glass_75_ffffff_1x400.png             |   Bin 107 -> 0 bytes
 .../ui-bg_highlight-soft_75_cccccc_1x100.png    |   Bin 101 -> 0 bytes
 .../ui-bg_inset-soft_95_fef1ec_1x100.png        |   Bin 123 -> 0 bytes
 .../ui-icons_222222_256x240.png                 |   Bin 4369 -> 0 bytes
 .../ui-icons_2e83ff_256x240.png                 |   Bin 4369 -> 0 bytes
 .../ui-icons_454545_256x240.png                 |   Bin 4369 -> 0 bytes
 .../ui-icons_888888_256x240.png                 |   Bin 4369 -> 0 bytes
 .../ui-icons_cd0a0a_256x240.png                 |   Bin 4369 -> 0 bytes
 .../ui-icons_f6cf3b_256x240.png                 |   Bin 8884 -> 0 bytes
 .../src/main/resources/ui/app/assets/index.html |    46 -
 .../ui/app/assets/javascripts/ember-qunit.js    |   266 -
 .../ui/app/assets/javascripts/jquery.mockjax.js |   692 -
 .../assets/javascripts/modernizr-2.6.2.min.js   |     4 -
 .../ui/app/assets/javascripts/qunit.js          |  2495 -
 .../ui/app/assets/javascripts/sinon-1.13.0.js   |  5830 ---
 .../app/assets/javascripts/sinon-qunit-1.0.0.js |    62 -
 .../ui/app/assets/javascripts/tests.js          |    29 -
 .../ui/app/assets/stylesheets/qunit.css         |   237 -
 .../src/main/resources/ui/app/assets/tests.html |    46 -
 .../main/resources/ui/app/components/.gitkeep   |     0
 .../ui/app/components/configSection.js          |   164 -
 .../src/main/resources/ui/app/config/app.js     |    27 -
 .../src/main/resources/ui/app/config/env.js     |    33 -
 .../src/main/resources/ui/app/config/router.js  |    35 -
 .../src/main/resources/ui/app/config/store.js   |    23 -
 .../main/resources/ui/app/controllers/.gitkeep  |     0
 .../app/controllers/application_controller.js   |    27 -
 .../createAppWizard/step1_controller.js         |   251 -
 .../createAppWizard/step2_controller.js         |   136 -
 .../createAppWizard/step3_controller.js         |   250 -
 .../createAppWizard/step4_controller.js         |   176 -
 .../controllers/create_app_wizard_controller.js |   122 -
 .../slider_app/summary_controller.js            |    27 -
 .../ui/app/controllers/slider_app_controller.js |   472 -
 .../app/controllers/slider_apps_controller.js   |    35 -
 .../ui/app/controllers/slider_controller.js     |   138 -
 .../ui/app/controllers/tooltip_controller.js    |    19 -
 .../src/main/resources/ui/app/helpers/.gitkeep  |     0
 .../src/main/resources/ui/app/helpers/ajax.js   |   388 -
 .../src/main/resources/ui/app/helpers/helper.js |   169 -
 .../resources/ui/app/helpers/string_utils.js    |   163 -
 .../src/main/resources/ui/app/initialize.js     |   171 -
 .../ui/app/mappers/application_type.js          |   162 -
 .../src/main/resources/ui/app/mappers/mapper.js |    56 -
 .../ui/app/mappers/slider_apps_mapper.js        |   292 -
 .../ui/app/mixins/ajax_error_handler.js         |    82 -
 .../resources/ui/app/mixins/run_periodically.js |   109 -
 .../main/resources/ui/app/mixins/with_panels.js |    53 -
 .../src/main/resources/ui/app/models/.gitkeep   |     0
 .../resources/ui/app/models/config_property.js  |    47 -
 .../src/main/resources/ui/app/models/host.js    |    33 -
 .../main/resources/ui/app/models/slider_app.js  |   207 -
 .../resources/ui/app/models/slider_app_alert.js |   149 -
 .../ui/app/models/slider_app_component.js       |    65 -
 .../resources/ui/app/models/slider_app_type.js  |    64 -
 .../ui/app/models/slider_app_type_component.js  |    63 -
 .../resources/ui/app/models/slider_config.js    |    45 -
 .../ui/app/models/slider_quick_link.js          |    33 -
 .../resources/ui/app/models/typed_property.js   |    38 -
 .../ui/app/routes/create_app_wizard.js          |    54 -
 .../src/main/resources/ui/app/routes/main.js    |    75 -
 .../src/main/resources/ui/app/styles/app.less   |   303 -
 .../resources/ui/app/styles/application.less    |    23 -
 .../resources/ui/app/styles/application.styl    |    18 -
 .../resources/ui/app/styles/apps-table.less     |   320 -
 .../main/resources/ui/app/styles/common.less    |   109 -
 .../resources/ui/app/styles/old-bootstrap.less  |   164 -
 .../main/resources/ui/app/styles/wizard.less    |   232 -
 .../resources/ui/app/templates/application.hbs  |    56 -
 .../ui/app/templates/common/ajax_error.hbs      |    24 -
 .../ui/app/templates/common/app_tooltip.hbs     |    24 -
 .../resources/ui/app/templates/common/chart.hbs |    26 -
 .../ui/app/templates/common/config.hbs          |    37 -
 .../ui/app/templates/components/.gitkeep        |     0
 .../app/templates/components/configSection.hbs  |    78 -
 .../ui/app/templates/createAppWizard.hbs        |    43 -
 .../ui/app/templates/createAppWizard/step1.hbs  |   192 -
 .../ui/app/templates/createAppWizard/step2.hbs  |    62 -
 .../ui/app/templates/createAppWizard/step3.hbs  |    37 -
 .../ui/app/templates/createAppWizard/step4.hbs  |    41 -
 .../main/resources/ui/app/templates/index.hbs   |    21 -
 .../resources/ui/app/templates/slider_app.hbs   |    70 -
 .../ui/app/templates/slider_app/configs.hbs     |    40 -
 .../slider_app/destroy/destroy_popup.hbs        |    20 -
 .../slider_app/destroy/destroy_popup_footer.hbs |    28 -
 .../ui/app/templates/slider_app/flex_popup.hbs  |    40 -
 .../ui/app/templates/slider_app/summary.hbs     |   135 -
 .../resources/ui/app/templates/slider_apps.hbs  |    87 -
 .../ui/app/templates/slider_title_tooltip.hbs   |    27 -
 .../ui/app/templates/unavailable_apps.hbs       |    22 -
 .../src/main/resources/ui/app/translations.js   |   169 -
 .../src/main/resources/ui/app/views/.gitkeep    |     0
 .../resources/ui/app/views/application_view.js  |    70 -
 .../resources/ui/app/views/common/chart_view.js |   914 -
 .../ui/app/views/common/config_set_view.js      |    57 -
 .../ui/app/views/common/filter_view.js          |   370 -
 .../resources/ui/app/views/common/sort_view.js  |   206 -
 .../resources/ui/app/views/common/table_view.js |   418 -
 .../ui/app/views/createAppWizard/step1_view.js  |    47 -
 .../ui/app/views/createAppWizard/step2_view.js  |    33 -
 .../ui/app/views/createAppWizard/step3_view.js  |    25 -
 .../ui/app/views/createAppWizard/step4_view.js  |    24 -
 .../ui/app/views/create_app_wizard_view.js      |    80 -
 .../ui/app/views/slider_app/configs_view.js     |    57 -
 .../slider_app/destroy_modal_footer_view.js     |    41 -
 .../app/views/slider_app/destroy_popup_view.js  |    37 -
 .../views/slider_app/metrics/app_metric_view.js |    77 -
 .../views/slider_app/metrics/metric2_view.js    |    63 -
 .../views/slider_app/metrics/metric3_view.js    |    61 -
 .../views/slider_app/metrics/metric4_view.js    |    54 -
 .../app/views/slider_app/metrics/metric_view.js |    70 -
 .../ui/app/views/slider_app/summary_view.js     |   141 -
 .../resources/ui/app/views/slider_app_view.js   |    30 -
 .../resources/ui/app/views/slider_apps_view.js  |   175 -
 .../slider/src/main/resources/ui/config.js      |   123 -
 .../main/resources/ui/envs/development/env.js   |    21 -
 .../main/resources/ui/envs/production/env.js    |    21 -
 .../arraycontroller/arraycontroller.js.hbs      |    23 -
 .../generators/arraycontroller/generator.json   |    10 -
 .../ui/generators/component/component.hbs.hbs   |    19 -
 .../ui/generators/component/component.js.hbs    |    23 -
 .../ui/generators/component/generator.json      |    14 -
 .../ui/generators/controller/controller.js.hbs  |    23 -
 .../ui/generators/controller/generator.json     |    10 -
 .../ui/generators/helper/generator.json         |    10 -
 .../ui/generators/helper/helper.js.hbs          |    24 -
 .../ui/generators/model/generator.json          |    10 -
 .../resources/ui/generators/model/model.js.hbs  |    24 -
 .../ui/generators/route/generator.json          |    10 -
 .../resources/ui/generators/route/route.js.hbs  |    25 -
 .../ui/generators/template/generator.json       |    10 -
 .../ui/generators/template/template.hbs.hbs     |    19 -
 .../resources/ui/generators/view/generator.json |    10 -
 .../resources/ui/generators/view/view.js.hbs    |    23 -
 .../slider/src/main/resources/ui/karma.conf.js  |    94 -
 .../slider/src/main/resources/ui/package.json   |    38 -
 .../slider/src/main/resources/ui/runner.js      |   136 -
 .../views/slider/src/main/resources/ui/setup.js |    78 -
 .../slider/src/main/resources/ui/test/index.md  |    28 -
 .../ui/test/integration/pages/index_test.js     |   127 -
 .../integration/pages/slider_errors_test.js     |    63 -
 .../processes/create_new_app_test.js            |   358 -
 .../createAppWizard/step1_controller_test.js    |   431 -
 .../createAppWizard/step2_controller_test.js    |   403 -
 .../createAppWizard/step3_controller_test.js    |   421 -
 .../createAppWizard/step4_controller_test.js    |   440 -
 .../create_app_wizard_controller_test.js        |   201 -
 .../slider_app/summary_controller_test.js       |    36 -
 .../controllers/slider_app_controller_test.js   |   607 -
 .../controllers/slider_apps_controller_test.js  |    58 -
 .../unit/controllers/slider_controller_test.js  |   140 -
 .../unit/mappers/slider_apps_mapper_test.js     |    85 -
 .../unit/models/slider_app_component_test.js    |    51 -
 .../ui/test/unit/models/slider_app_test.js      |    95 -
 .../test/unit/views/common/table_view_test.js   |    35 -
 .../unit/views/slider_app/summary_view_test.js  |    68 -
 .../ui/vendor/scripts/common/bootstrap.js       |  1951 -
 .../ui/vendor/scripts/common/bs-basic.min.js    |     1 -
 .../ui/vendor/scripts/common/bs-button.min.js   |     1 -
 .../ui/vendor/scripts/common/bs-core.min.js     |     1 -
 .../ui/vendor/scripts/common/bs-modal.min.js    |     1 -
 .../ui/vendor/scripts/common/bs-nav.min.js      |     1 -
 .../ui/vendor/scripts/common/bs-popover.min.js  |     1 -
 .../vendor/scripts/common/console-polyfill.js   |    13 -
 .../ui/vendor/scripts/common/cubism.v1.js       |  1085 -
 .../resources/ui/vendor/scripts/common/d3.v2.js |  7033 ---
 .../vendor/scripts/common/ember-i18n-1.4.1.js   |   199 -
 .../ui/vendor/scripts/common/handlebars.js      |  2746 --
 .../ui/vendor/scripts/common/jquery.js          |  8829 ----
 .../ui/vendor/scripts/common/jquery.timeago.js  |   214 -
 .../ui/vendor/scripts/common/jquery.ui.core.js  |   334 -
 .../ui/vendor/scripts/common/jquery.ui.mouse.js |   175 -
 .../vendor/scripts/common/jquery.ui.sortable.js |  1088 -
 .../vendor/scripts/common/jquery.ui.widget.js   |   276 -
 .../ui/vendor/scripts/common/moment.min.js      |     7 -
 .../ui/vendor/scripts/common/rickshaw.js        |  2659 -
 .../resources/ui/vendor/scripts/common/tv4.js   |  1605 -
 .../ui/vendor/scripts/development/ember-data.js | 10620 ----
 .../ui/vendor/scripts/development/ember.js      | 43235 -----------------
 .../ui/vendor/scripts/production/ember-data.js  | 10626 ----
 .../ui/vendor/scripts/production/ember.js       | 41620 ----------------
 .../resources/ui/vendor/styles/bootstrap.css    |  5785 ---
 .../main/resources/ui/vendor/styles/cubism.css  |    82 -
 .../ui/vendor/styles/font-awesome-ie7.css       |  1203 -
 .../resources/ui/vendor/styles/font-awesome.css |  1479 -
 .../jquery-ui-1.8.16.custom.css                 |  1320 -
 .../resources/ui/vendor/styles/rickshaw.css     |   307 -
 .../src/main/resources/view.log4j.properties    |    27 -
 .../views/slider/src/main/resources/view.xml    |    82 -
 .../ambari/view/slider/SliderClientTest.java    |    31 -
 .../rest/client/SliderAppMasterClientTest.java  |   177 -
 302 files changed, 1190 insertions(+), 185788 deletions(-)
----------------------------------------------------------------------



[19/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/ember-i18n-1.4.1.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/ember-i18n-1.4.1.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/ember-i18n-1.4.1.js
deleted file mode 100644
index b7a612c..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/ember-i18n-1.4.1.js
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
-Copyright (C) 2011 by James A. Rosen; Zendesk, Inc.
-
-  Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-(function(window) {
-  var I18n, assert, findTemplate, get, set, isBinding, lookupKey, pluralForm;
-
-  get = Ember.Handlebars.get || Ember.Handlebars.getPath || Ember.getPath;
-  set = Ember.set;
-
-  function warn(msg) { Ember.Logger.warn(msg); }
-
-  if (typeof CLDR !== "undefined" && CLDR !== null) pluralForm = CLDR.pluralForm;
-
-  if (pluralForm == null) {
-    warn("CLDR.pluralForm not found. Em.I18n will not support count-based inflection.");
-  }
-
-  lookupKey = function(key, hash) {
-    var firstKey, idx, remainingKeys;
-
-    if (hash[key] != null) { return hash[key]; }
-
-    if ((idx = key.indexOf('.')) !== -1) {
-      firstKey = key.substr(0, idx);
-      remainingKeys = key.substr(idx + 1);
-      hash = hash[firstKey];
-      if (hash) { return lookupKey(remainingKeys, hash); }
-    }
-  };
-
-  assert = Ember.assert != null ? Ember.assert : window.ember_assert;
-
-  findTemplate = function(key, setOnMissing) {
-    assert("You must provide a translation key string, not %@".fmt(key), typeof key === 'string');
-    var result = lookupKey(key, I18n.translations);
-
-    if (setOnMissing) {
-      if (result == null) {
-        result = I18n.translations[key] = I18n.compile("Missing translation: " + key);
-        warn("Missing translation: " + key);
-      }
-    }
-
-    if ((result != null) && !jQuery.isFunction(result)) {
-      result = I18n.translations[key] = I18n.compile(result);
-    }
-
-    return result;
-  };
-
-  function eachTranslatedAttribute(object, fn) {
-    var isTranslatedAttribute = /(.+)Translation$/,
-      isTranslatedAttributeMatch;
-
-    for (var key in object) {
-      isTranslatedAttributeMatch = key.match(isTranslatedAttribute);
-      if (isTranslatedAttributeMatch) {
-        fn.call(object, isTranslatedAttributeMatch[1], I18n.t(object[key]));
-      }
-    }
-  }
-
-  I18n = {
-    compile: Handlebars.compile,
-
-    translations: {},
-
-    template: function(key, count) {
-      var interpolatedKey, result, suffix;
-      if ((count != null) && (pluralForm != null)) {
-        suffix = pluralForm(count);
-        interpolatedKey = "%@.%@".fmt(key, suffix);
-        result = findTemplate(interpolatedKey, false);
-      }
-      return result != null ? result : result = findTemplate(key, true);
-    },
-
-    t: function(key, context) {
-      var template;
-      if (context == null) context = {};
-      template = I18n.template(key, context.count);
-      return template(context);
-    },
-
-    TranslateableProperties: Em.Mixin.create({
-      init: function() {
-        var result = this._super.apply(this, arguments);
-        eachTranslatedAttribute(this, function(attribute, translation) {
-          set(this, attribute, translation);
-        });
-        return result;
-      }
-    }),
-
-    TranslateableAttributes: Em.Mixin.create({
-      didInsertElement: function() {
-        var result = this._super.apply(this, arguments);
-        eachTranslatedAttribute(this, function(attribute, translation) {
-          this.$().attr(attribute, translation);
-        });
-        return result;
-      }
-    })
-  };
-
-  Ember.I18n = I18n;
-
-  isBinding = /(.+)Binding$/;
-
-  // CRUFT: in v2, which requires Ember 1.0+, Ember.uuid will always be
-  //        available, so this function can be cleaned up.
-  var uniqueElementId = (function(){
-    var id = Ember.uuid || 0;
-    return function() {
-      var elementId = 'i18n-' + id++;
-      return elementId;
-    };
-  })();
-
-  Handlebars.registerHelper('t', function(key, options) {
-    var attrs, context, data, elementID, result, tagName, view;
-    context = this;
-    attrs = options.hash;
-    data = options.data;
-    view = data.view;
-    tagName = attrs.tagName || 'span';
-    delete attrs.tagName;
-    elementID = uniqueElementId();
-
-    Em.keys(attrs).forEach(function(property) {
-      var bindPath, currentValue, invoker, isBindingMatch, normalized, normalizedPath, observer, propertyName, root, _ref;
-      isBindingMatch = property.match(isBinding);
-
-      if (isBindingMatch) {
-        propertyName = isBindingMatch[1];
-        bindPath = attrs[property];
-        currentValue = get(context, bindPath, options);
-        attrs[propertyName] = currentValue;
-        invoker = null;
-        normalized = Ember.Handlebars.normalizePath(context, bindPath, data);
-        _ref = [normalized.root, normalized.path], root = _ref[0], normalizedPath = _ref[1];
-
-        observer = function() {
-          var elem, newValue;
-          if (view.get('state') !== 'inDOM') {
-            Em.removeObserver(root, normalizedPath, invoker);
-            return;
-          }
-          newValue = get(context, bindPath, options);
-          elem = view.$("#" + elementID);
-          attrs[propertyName] = newValue;
-          return elem.html(I18n.t(key, attrs));
-        };
-
-        invoker = function() {
-          return Em.run.once(observer);
-        };
-
-        return Em.addObserver(root, normalizedPath, invoker);
-      }
-    });
-
-    result = '<%@ id="%@">%@</%@>'.fmt(tagName, elementID, I18n.t(key, attrs), tagName);
-    return new Handlebars.SafeString(result);
-  });
-
-  Handlebars.registerHelper('translateAttr', function(options) {
-    var attrs, result;
-    attrs = options.hash;
-    result = [];
-
-    Em.keys(attrs).forEach(function(property) {
-      var translatedValue;
-      translatedValue = I18n.t(attrs[property]);
-      return result.push('%@="%@"'.fmt(property, translatedValue));
-    });
-
-    return new Handlebars.SafeString(result.join(' '));
-  });
-
-}).call(undefined, this);


[21/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-button.min.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-button.min.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-button.min.js
deleted file mode 100644
index cac67e5..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-button.min.js
+++ /dev/null
@@ -1 +0,0 @@
-+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d)};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.is("input")?"val":"html",e=c.data();a+="Text",e.resetText||c.data("resetText",c[d]()),c[d](e[a]||this.options[a]),setTimeout(function(){"loadingText"==a?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.closest('[data-toggle="buttons"]');if(a.length){var b=this.$element.find("input").prop("checked",!this.$element.hasClass("active")).trigger("change");"radio"===b.prop("type")&&a.find(".active").removeClass("active")}this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=functio
 n(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(window.jQuery),function(){Bootstrap.BsButtonComponent=Ember.Component.extend(Bootstrap.TypeSupport,Bootstrap.SizeSupport,{layoutName:"components/bs-button",tagName:"button",classNames:["btn"],classNameBindings:["blockClass"],classTypePrefix:"btn",clickedParam:null,block:null,attributeBindings:["disabled","dismiss:data-dismiss","_type:type","style"],_type:"button",bubbles:!0,allowedProperties:["title","type","size","block","disabled","clicked","dismiss","class"],icon_active:void 0,icon_inactive:void 0},{init:function(){var a,b,c,d,e,f,g;if(this._super(),null!=this.get("content")&&"instance"===Ember.typeOf(this.get("content")))for(b=this.get("content"),f=this.get("allowedProperties"),d=0,e=f.length;e>d;d++)c=f[d],null!=b[c]&&this.set(c,b[c]);else null==this.get("title")&&this.set
 ("title",this.get("content"));g=[];for(a in this)null!=a.match(/^data-[\w-]*$/)&&g.push(this.attributeBindings.pushObject(a));return g},blockClass:function(){return this.block?""+this.classTypePrefix+"-block":null}.property("block").cacheable(),click:function(a){return this.get("bubbles")||a.stopPropagation(),this.sendAction("clicked",this.get("clickedParam"))},loadingChanged:function(){var a;return a=null!==this.get("loading")?this.get("loading"):"reset",Ember.$("#"+this.elementId).button(a)}.observes("loading"),icon:function(){return this.get("isActive")?this.get("icon_active"):this.get("icon_inactive")}.property("isActive")}),Ember.Handlebars.helper("bs-button",Bootstrap.BsButtonComponent)}.call(this),function(){Bootstrap.BsBtnGroup=Bootstrap.ItemsView.extend(Bootstrap.SizeSupport,Bootstrap.ItemsSelection,{classTypePrefix:["btn-group"],classNames:["btn-group"],classNameBindings:["vertical:btn-group-vertical"],itemViewClass:Bootstrap.BsButtonComponent.extend(Bootstrap.ItemValue,Bo
 otstrap.ItemSelection,{init:function(){return this._super(),this.set("icon_active",this.get("parentView.icon_active")),this.set("icon_inactive",this.get("parentView.icon_inactive"))}})}),Ember.Handlebars.helper("bs-btn-group",Bootstrap.BsBtnGroup)}.call(this),function(){Bootstrap.BsBtnToolbarComponent=Ember.Component.extend({layoutName:"components/bs-btn-toolbar",classNames:["btn-toolbar"]}),Ember.Handlebars.helper("bs-btn-toolbar",Bootstrap.BsBtnToolbarComponent)}.call(this),this.Ember=this.Ember||{},this.Ember.TEMPLATES=this.Ember.TEMPLATES||{},this.Ember.TEMPLATES["components/bs-button"]=Ember.Handlebars.template(function(a,b,c,d,e){function f(a,b){var d,e,f,g,h="";return b.buffer.push("\n    <i "),e={"class":a},f={"class":"STRING"},g={hash:{"class":"icon"},contexts:[],types:[],hashContexts:e,hashTypes:f,data:b},b.buffer.push(l((d=c["bind-attr"]||a["bind-attr"],d?d.call(a,g):k.call(a,"bind-attr",g)))),b.buffer.push("></i>\n"),h}this.compilerInfo=[4,">= 1.0.0"],c=this.merge(c,Embe
 r.Handlebars.helpers),e=e||{};var g,h,i,j="",k=c.helperMissing,l=this.escapeExpression,m=this;return h={},i={},g=c["if"].call(b,"icon",{hash:{},inverse:m.noop,fn:m.program(1,f,e),contexts:[b],types:["ID"],hashContexts:i,hashTypes:h,data:e}),(g||0===g)&&e.buffer.push(g),e.buffer.push("\n"),h={},i={},e.buffer.push(l(c._triageMustache.call(b,"title",{hash:{},contexts:[b],types:["ID"],hashContexts:i,hashTypes:h,data:e}))),h={},i={},e.buffer.push(l(c._triageMustache.call(b,"yield",{hash:{},contexts:[b],types:["ID"],hashContexts:i,hashTypes:h,data:e}))),j}),this.Ember=this.Ember||{},this.Ember.TEMPLATES=this.Ember.TEMPLATES||{},this.Ember.TEMPLATES["components/bs-btn-toolbar"]=Ember.Handlebars.template(function(a,b,c,d,e){this.compilerInfo=[4,">= 1.0.0"],c=this.merge(c,Ember.Handlebars.helpers),e=e||{};var f,g,h=this.escapeExpression;f={},g={},e.buffer.push(h(c._triageMustache.call(b,"yield",{hash:{},contexts:[b],types:["ID"],hashContexts:g,hashTypes:f,data:e})))});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-core.min.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-core.min.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-core.min.js
deleted file mode 100644
index 37d145d..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-core.min.js
+++ /dev/null
@@ -1 +0,0 @@
-+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]}}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(window.jQuery),function(){var a;a=window.Bootstrap=Ember.Namespace.create()}.call(this),function(){var a,b;a=window.Bootstrap,b=Ember.get,a.WithRouter=Ember.Mixin.create({router:Ember.computed(function(){return b(this,"controller").container.lookup("router:main")})})}.call(this),function(){var a,b,c;a=window.Bootstrap,b=Ember.get,c=Ember.set,a.TypeSupport=Ember.Mixin.create({classTypePrefix:Ember.required(String),classNameBindings:["typeClass"],type:"default",typeClass:func
 tion(){var a,b;return b=this.get("type"),null==b&&(b="default"),a=this.get("classTypePrefix"),""+a+"-"+b}.property("type").cacheable()})}.call(this),function(){var a,b,c;a=window.Bootstrap,b=Ember.get,c=Ember.set,a.SizeSupport=Ember.Mixin.create({classTypePrefix:Ember.required(String),classNameBindings:["sizeClass","largeSizeClass","smallSizeClass","extraSmallSizeClass"],size:null,xs:null,small:null,large:null,extraSmallSizeClass:function(){var a;return a=this.get("classTypePrefix"),this.xs?""+a+"-xs":null}.property("xs").cacheable(),smallSizeClass:function(){var a;return a=this.get("classTypePrefix"),this.small?""+a+"-sm":null}.property("small").cacheable(),largeSizeClass:function(){var a;return a=this.get("classTypePrefix"),this.large?""+a+"-lg":null}.property("large").cacheable(),sizeClass:function(){var a,b;return b=this.get("size"),a=this.get("classTypePrefix"),b?""+a+"-"+b:null}.property("size").cacheable()})}.call(this),function(){Bootstrap.ItemValue=Ember.Mixin.create({value
 :function(){var a,b;return a=this.get("parentView"),null!=a?b=this.get("content"):void 0}.property("content").cacheable()})}.call(this),function(){Bootstrap.ItemSelection=Ember.Mixin.create(Bootstrap.ItemValue,Bootstrap.WithRouter,{classNameBindings:["isActive:active"],init:function(){return this._super(),this.didRouteChange()},didRouteChange:function(){var a,b,c;return b=this.get("content.linkTo"),null!=b&&(a=this.get("parentView"),null!=a)?(null!=(c=this.get("router"))?c.isActive(b):void 0)?a.set("selected",this.get("value")):void 0:void 0}.observes("router.url"),isActive:function(){var a,b,c;return a=this.get("parentView"),null==a?!1:(b=a.get("selected"),c=this.get("value"),null==c?!1:b===c)}.property("value","parentView.selected","content.linkTo").cacheable(),click:function(a){var b,c;return a.preventDefault(),c=this.get("parentView"),null==c||(b=this.get("content"),"object"==typeof b&&b.get("disabled")||null!=this.get("content.linkTo"))?void 0:c.set("selected",this.get("value")
 )}})}.call(this),function(){Bootstrap.ItemsSelection=Ember.Mixin.create({multiSelection:!1,selected:[]})}.call(this),function(){Bootstrap.Nav=Ember.Mixin.create({classNames:["nav"],classNameBindings:["navTypeClass"],tagName:"ul",navType:null,navTypeClass:function(){return null!=this.navType?"nav-"+this.navType:null}.property("navType").cacheable()})}.call(this),function(){Bootstrap.NavItem=Ember.Mixin.create(Bootstrap.SelectableView)}.call(this),function(){var a,b;a=function(a){var b,c;if(a&&(c=a.get("parentView")))return b=c instanceof Bootstrap.ItemsView,Ember.assert("The parent view must be an instance of Bootstrap.ItemsView or any inherited class",b),b?c:void 0},b=function(a,b,c){return"instance"===Ember.typeOf(a)||Ember.canInvoke(a,"get")?a.get(b):c},Bootstrap.ItemView=Ember.View.extend({isItem:!0,classNameBindings:["disabled"],title:function(){var c,d,e;if(e=a(this))return d=e.get("itemTitleKey")||"title",c=this.get("content"),b(c,d,c)}.property("content").cacheable(),disabled
 :function(){var c,d,e;if(e=a(this))return c=this.get("content"),d=!!b(c,"disabled",!1),d&&this.get("isActive")&&e.set("selected",null),d}.property("content","content.disabled").cacheable()})}.call(this),function(){Bootstrap.ItemsView=Ember.CollectionView.extend({didInsertElement:function(){var a,b,c,d,e,f;if(this.get("default")){for(a=this.get("default"),e=this._childViews,c=0,d=e.length;d>c;c++)b=e[c],(null!=(f=b.get("content"))?f.get("title"):void 0)===a&&this.set("selected",b.get("content"));return Ember.assert("Could not activate default tab "+a+" as it doesnt exist",a)}}})}.call(this),function(){Bootstrap.ItemPaneView=Ember.View.extend({template:Ember.Handlebars.compile(["{{#if view.content.template}}","{{bsItemPanePartial view.content.template}}","{{/if}}"].join("\n")),corrItem:function(){var a,b,c,d;if(null!=this.get("parentView").get("corrItemsView"))for(d=this.get("parentView").get("corrItemsView")._childViews,b=0,c=d.length;c>b;b++)if(a=d[b],a.content===this.get("content")
 )return a}.property("parentView.corrItemsView"),isVisible:function(){var a;return null!=(a=this.get("corrItem"))?a.get("isActive"):void 0}.property("corrItem.isActive"),controller:function(){var a,b;return a=this.get("parentView.controller"),this.get("content.controller")&&(b=this.get("container").lookup("controller:"+this.get("content.controller")),b&&(a=b)),a}.property("content")}),Ember.Handlebars.helper("bsItemPanePartial",function(a,b){var c,d;return d=b.data.view,c=d.templateForName(a),Ember.assert("Unable to find template with name '"+a+"'",c),c(this,{data:b.data})})}.call(this),function(){Bootstrap.ItemsPanesView=Ember.CollectionView.extend({viewsInserted:!1,corrItemsView:function(){var a;return a=Ember.View.views[this.get("items-id")]}.property("viewsInserted"),didInsertElement:function(){return this._super(),this.set("viewsInserted",!0)}})}.call(this);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-modal.min.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-modal.min.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-modal.min.js
deleted file mode 100644
index c56a0d0..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-modal.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(){Bootstrap.BsModalComponent=Ember.Component.extend(Ember.Evented,{layoutName:"components/bs-modal",classNames:["modal"],attributeBindings:["role","aria-labelledby","isAriaHidden:aria-hidden","ariaLabelledBy:aria-labelledby"],isAriaHidden:function(){return""+this.get("isVisible")}.property("isVisible"),modalBackdrop:'<div class="modal-backdrop fade in"></div>',role:"dialog",footerViews:[],backdrop:!0,title:null,isVisible:!1,manual:!1,didInsertElement:function(){var a;return this._super(),this.setupBinders(),a=this.get("name"),Ember.assert("Modal name is required for modal view "+this.get("elementId"),this.get("name")),null==a&&(a=this.get("elementId")),Bootstrap.ModalManager.add(a,this),this.manual?this.show():void 0},becameVisible:function(){return this.get("backdrop")?this.appendBackdrop():void 0},becameHidden:function(){return this._backdrop?this._backdrop.remove():void 0},appendBackdrop:function(){var a;return a=this.$().parent(),this._backdrop=Em.$(this.modalBackdrop)
 .appendTo(a)},show:function(){return this.set("isVisible",!0)},hide:function(){return this.set("isVisible",!1)},toggle:function(){return this.toggleProperty("isVisible")},click:function(a){var b,c;return b=a.target,c=b.getAttribute("data-dismiss"),"modal"===c?this.close():void 0},keyPressed:function(a){return 27===a.keyCode?this.close(a):void 0},close:function(){return this.get("manual")?this.destroy():this.hide(),this.trigger("closed")},willDestroyElement:function(){var a;return this.removeHandlers(),a=this.get("name"),null==a&&(a=this.get("elementId")),Bootstrap.ModalManager.remove(a,this),this._backdrop?this._backdrop.remove():void 0},removeHandlers:function(){return jQuery(window.document).unbind("keyup",this._keyUpHandler)},setupBinders:function(){var a,b=this;return a=function(a){return b.keyPressed(a)},jQuery(window.document).bind("keyup",a),this._keyUpHandler=a}}),Bootstrap.ModalManager=Ember.Object.create({add:function(a,b){return this.set(a,b)},register:function(a,b){retur
 n this.add(a,b),b.appendTo(b.get("targetObject").namespace.rootElement)},remove:function(a){return this.set(a,null)},close:function(a){return this.get(a).close()},hide:function(a){return this.get(a).hide()},show:function(a){return this.get(a).show()},toggle:function(a){return this.get(a).toggle()},confirm:function(a,b,c,d,e){var f,g;return null==d&&(d="Confirm"),null==e&&(e="Cancel"),f=Ember.View.extend({template:Ember.Handlebars.compile(c||"Are you sure you would like to perform this action?")}),g=[Ember.Object.create({title:d,clicked:"modalConfirmed",dismiss:"modal"}),Ember.Object.create({title:e,clicked:"modalCanceled",dismiss:"modal"})],this.open("confirm-modal",b||"Confirmation required!",f,g,a)},openModal:function(a,b){var c,d;return null==b&&(b={}),d=b.rootElement||".ember-application",c=a.create(b),c.appendTo(d)},open:function(a,b,c,d,e){var f,g,h;return f=e.container.lookup("component-lookup:main"),g=f.lookupFactory("bs-modal",e.get("container")).create(),g.setProperties({n
 ame:a,title:b,manual:!0,footerButtons:d,targetObject:e}),"string"===Ember.typeOf(c)?(h=e.container.lookup("template:"+c),Ember.assert("Template "+c+" was specified for Modal but template could not be found.",h),h&&g.setProperties({body:Ember.View.extend({template:h,controller:e})})):"class"===Ember.typeOf(c)&&g.setProperties({body:c,controller:e}),g.appendTo(e.namespace.rootElement)}}),Ember.Application.initializer({name:"bs-modal",initialize:function(a){return a.register("component:bs-modal",Bootstrap.BsModalComponent)}})}.call(this),this.Ember=this.Ember||{},this.Ember.TEMPLATES=this.Ember.TEMPLATES||{},this.Ember.TEMPLATES["components/bs-modal"]=Ember.Handlebars.template(function(a,b,c,d,e){function f(a,b){var d,e,f,g,h="";return b.buffer.push("\n                    <i "),e={"class":a},f={"class":"STRING"},g={hash:{"class":"titleIconClasses"},contexts:[],types:[],hashContexts:e,hashTypes:f,data:b},b.buffer.push(p((d=c["bind-attr"]||a["bind-attr"],d?d.call(a,g):o.call(a,"bind-attr
 ",g)))),b.buffer.push("></i>\n                "),h}function g(a,b){var d,e,f="";return b.buffer.push("\n                "),d={},e={},b.buffer.push(p(c.view.call(a,"view.body",{hash:{},contexts:[a],types:["ID"],hashContexts:e,hashTypes:d,data:b}))),b.buffer.push("\n            "),f}function h(a,b){var d,e,f="";return b.buffer.push("\n                "),d={},e={},b.buffer.push(p(c._triageMustache.call(a,"yield",{hash:{},contexts:[a],types:["ID"],hashContexts:e,hashTypes:d,data:b}))),b.buffer.push("\n            "),f}function i(a,b){var d,e,f,g,h="";return b.buffer.push("\n                "),e={content:a,targetObjectBinding:a},f={content:"ID",targetObjectBinding:"STRING"},g={hash:{content:"",targetObjectBinding:"view.targetObject"},contexts:[],types:[],hashContexts:e,hashTypes:f,data:b},b.buffer.push(p((d=c["bs-button"]||a["bs-button"],d?d.call(a,g):o.call(a,"bs-button",g)))),b.buffer.push("\n            "),h}function j(a,b){var d,e,f="";return b.buffer.push("\n                "),d={},
 e={},b.buffer.push(p(c.view.call(a,"",{hash:{},contexts:[a],types:["ID"],hashContexts:e,hashTypes:d,data:b}))),b.buffer.push("\n            "),f}this.compilerInfo=[4,">= 1.0.0"],c=this.merge(c,Ember.Handlebars.helpers),e=e||{};var k,l,m,n="",o=c.helperMissing,p=this.escapeExpression,q=this;return e.buffer.push('<div class="modal-dialog">\n    <div class="modal-content">\n        <div class="modal-header">\n            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>\n            <h4 class="modal-title">\n                '),l={},m={},k=c["if"].call(b,"titleIconClasses",{hash:{},inverse:q.noop,fn:q.program(1,f,e),contexts:[b],types:["ID"],hashContexts:m,hashTypes:l,data:e}),(k||0===k)&&e.buffer.push(k),e.buffer.push("\n                "),m={unescaped:b},l={unescaped:"STRING"},k=c._triageMustache.call(b,"title",{hash:{unescaped:"true"},contexts:[b],types:["ID"],hashContexts:m,hashTypes:l,data:e}),(k||0===k)&&e.buffer.push(k),e.buffer.push('\n
             </h4>\n        </div>\n        <div class="modal-body">\n            '),l={},m={},k=c["if"].call(b,"body",{hash:{},inverse:q.program(5,h,e),fn:q.program(3,g,e),contexts:[b],types:["ID"],hashContexts:m,hashTypes:l,data:e}),(k||0===k)&&e.buffer.push(k),e.buffer.push('\n        </div>\n        <div class="modal-footer">\n            '),l={},m={},k=c.each.call(b,"footerButtons",{hash:{},inverse:q.noop,fn:q.program(7,i,e),contexts:[b],types:["ID"],hashContexts:m,hashTypes:l,data:e}),(k||0===k)&&e.buffer.push(k),e.buffer.push("\n            "),l={},m={},k=c.each.call(b,"footerViews",{hash:{},inverse:q.noop,fn:q.program(9,j,e),contexts:[b],types:["ID"],hashContexts:m,hashTypes:l,data:e}),(k||0===k)&&e.buffer.push(k),e.buffer.push("\n        </div>\n    </div>\n</div>"),n});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-nav.min.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-nav.min.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-nav.min.js
deleted file mode 100644
index 8f9f7af..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-nav.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(){Bootstrap.BsPill=Bootstrap.ItemView.extend(Bootstrap.NavItem,Bootstrap.ItemSelection,{template:Ember.Handlebars.compile("{{#if view.content.linkTo}}\n    {{#if view.parentView.dynamicLink}}\n        {{#link-to view.content.linkTo model}}{{view.title}}{{/link-to}}\n    {{else}}\n        {{#link-to view.content.linkTo}}{{view.title}}{{/link-to}}\n    {{/if}}\n{{else}}\n    {{view view.pillAsLinkView}}\n{{/if}}"),pillAsLinkView:Ember.View.extend({tagName:"a",template:Ember.Handlebars.compile("{{view.parentView.title}}"),attributeBindings:["href"],href:"#"})})}.call(this),function(){Bootstrap.BsPills=Bootstrap.ItemsView.extend(Bootstrap.Nav,{navType:"pills",classNameBindings:["stacked:nav-stacked","justified:nav-justified"],attributeBindings:["style"],itemViewClass:Bootstrap.BsPill}),Ember.Handlebars.helper("bs-pills",Bootstrap.BsPills)}.call(this),function(){Bootstrap.BsTabPane=Bootstrap.ItemPaneView.extend()}.call(this),function(){Bootstrap.BsTabsPanes=Bootstrap.ItemsPanes
 View.extend({classNames:["tab-content"],itemViewClass:Bootstrap.BsTabPane}),Ember.Handlebars.helper("bs-tabs-panes",Bootstrap.BsTabsPanes)}.call(this),function(){Bootstrap.BsTabs=Bootstrap.ItemsView.extend(Bootstrap.Nav,{navType:"tabs",classNameBindings:["justified:nav-justified"],attributeBindings:["style"],itemViewClass:Bootstrap.BsPill}),Ember.Handlebars.helper("bs-tabs",Bootstrap.BsTabs)}.call(this);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-popover.min.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-popover.min.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-popover.min.js
deleted file mode 100644
index 48e7b05..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-popover.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(){var a,b,c;a='<div class="arrow"></div>{{#if title}}<h3 class="popover-title">{{title}}</h3>{{/if}}<div class="popover-content">{{#if template}}   {{partial partialTemplateName}}{{else}}   {{#if content}}       {{#if html}}           {{{content}}}       {{else}}           {{content}}       {{/if}}   {{else}}       {{yield}}   {{/if}}{{/if}}    </div>',Ember.TEMPLATES["components/bs-popover"]=Ember.Handlebars.compile(a),c='<div class="tooltip-arrow"></div><div class="tooltip-inner">{{#if html}}   {{{content}}}{{else}}   {{content}}{{/if}}</div>',Ember.TEMPLATES["components/bs-tooltip"]=Ember.Handlebars.compile(c),Bootstrap.BsPopoverComponent=Ember.Component.extend({layoutName:"components/bs-popover",classNames:"popover",classNameBindings:["fade","in","top","left","right","bottom"],top:function(){return"top"===this.get("realPlacement")}.property("realPlacement"),left:function(){return"left"===this.get("realPlacement")}.property("realPlacement"),right:function(){return"right
 "===this.get("realPlacement")}.property("realPlacement"),bottom:function(){return"bottom"===this.get("realPlacement")}.property("realPlacement"),titleBinding:"data.title",content:Ember.computed.alias("data.content"),html:!1,delay:0,animation:!0,fade:function(){return this.get("animation")}.property("animation"),"in":function(){return this.get("isVisible")}.property("isVisible"),placement:function(){return this.get("data.placement")||"top"}.property("data.placement"),$element:null,$tip:null,inserted:!1,styleUpdater:function(){var a,b,c,d,e;if(this.$tip&&this.get("isVisible"))return this.$tip.css({top:0,left:0,display:"block"}).addClass(this.get("realPlacement")),d=this.get("realPlacement"),e=this.getPosition(),b=this.$tip[0].offsetWidth,a=this.$tip[0].offsetHeight,c=this.getCalculatedOffset(d,e,b,a),this.$tip.css("top",c.top),this.$tip.css("left",c.left),this.firstTime?(this.firstTime=!1,this.styleUpdater(),this.firstTime=!0):void 0}.observes("content","realPlacement","inserted","isV
 isible"),init:function(){var a,b;return this._super(),this.set("html",this.get("data.html")||!1),this.set("template",void 0!==this.get("data.template")),this.get("template")?(a="components/bs-popover/_partial-content-"+this.get("tip_id"),b=this.get("data.template"),Ember.TEMPLATES[a]="function"==typeof b?b:Ember.Handlebars.compile(b),this.set("partialTemplateName",a)):void 0},didInsertElement:function(){var a,b=this;return this.$tip=this.$(),a=Bootstrap.TooltipBoxManager.attribute,a="["+a+"='"+this.get("tip_id")+"']",this.$element=$(a),this.set("inserted",!0),"hover"===this.get("data.trigger")&&this.get("data.sticky")&&this.$().on("mouseenter",function(){return clearTimeout(Bootstrap.TooltipBoxManager.timeout)}),this.$().on("mouseleave",function(){return Bootstrap.TooltipBoxManager.removeTip(b.get("tip_id"))}),this.$().find("img").load(function(){return b.afterRender()})},afterRender:function(){return this.notifyPropertyChange("content")},realPlacement:function(){var a,b,c,d,e,f,g,h
 ,i,j,k,l;return this.$tip?(k=this.get("placement")||"",e=/\s?auto?\s?/i,d=e.test(k),d&&(k=k.replace(e,"")||"top"),l=this.getPosition(),c=this.$tip[0].offsetWidth,b=this.$tip[0].offsetHeight,d&&(a=this.$element.parent(),g=k,f=document.documentElement.scrollTop||document.body.scrollTop,j=window.innerWidth,h=window.innerHeight,i=0,k="bottom"===k&&l.top+l.height+b-f>h?"top":"top"===k&&l.top-f-b<0?"bottom":"right"===k&&l.right+c>j?"left":"left"===k&&l.left-c<i?"right":k),k):null}.property("placement","inserted"),hasContent:function(){return this.get("title")},getPosition:function(){var a;return a=this.$element[0],$.extend({},"function"==typeof a.getBoundingClientRect?a.getBoundingClientRect():{width:a.offsetWidth,height:a.offsetHeight},this.$element.offset())},getCalculatedOffset:function(a,b,c,d){return"bottom"===a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"===a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"===a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2
 ,left:b.left+b.width}},actions:{close:function(){return Bootstrap.TooltipBoxManager.removeTip(this.get("tip_id"))}}}),Ember.Handlebars.helper("bs-popover",Bootstrap.BsPopoverComponent),Bootstrap.BsTooltipComponent=Bootstrap.BsPopoverComponent.extend({classNames:"tooltip",layoutName:"components/bs-tooltip",init:function(){return this._super(),this.classNames.removeObject("popover"),this.set("content",this.get("content")||this.get("title"))}}),Ember.Handlebars.helper("bs-tooltip",Bootstrap.BsTooltipComponent),Bootstrap.TooltipBoxController=Ember.Controller.extend({popoversBinding:"Bootstrap.TooltipBoxManager.popovers",tooltipsBinding:"Bootstrap.TooltipBoxManager.tooltips"}),b="{{#each pop in popovers}}   {{bs-popover       tip_id=pop.tip_id       data=pop.data   }}{{/each}}{{#each pop in tooltips}}   {{bs-tooltip       tip_id=pop.tip_id       data=pop.data   }}{{/each}}",Ember.TEMPLATES["bs-tooltip-box"]=Ember.Handlebars.compile(b),Bootstrap.TooltipBoxManager=Ember.Object.create({uuid
 :0,attribute:"bootstrap-tip-id",willSetup:!1,registeredTips:{},registerTip:function(a,b,c){var d,e;return d=++this.uuid,e=this,this.registeredTips[d]={id:d,data:b,eventName:b.trigger||("popover"===a?"click":"hover"),bound:!1,type:a,sticky:b.sticky,show:function(){e.showTip(d)},hide:function(){e.hideTip(d,!0)},toggle:function(){e.toggleTip(d)}},this.willSetup||(this.willSetup=!0,Ember.run.scheduleOnce("afterRender",this,function(){e.setupBindings()})),c.data.view.on("willClearRender",function(){Bootstrap.TooltipBoxManager.removeTip(d),$("["+e.attribute+"='"+d+"']").unbind(),delete Bootstrap.TooltipBoxManager.registeredTips[d]}),d},setupBindings:function(){var a,b,c;for(b in this.registeredTips)if(c=this.registeredTips[b],c.bound===!1)switch(c.bound=!0,a=$("["+this.attribute+"='"+b+"']"),c.eventName){case"click":a.on("click",$.proxy(c.toggle,c));break;case"hover":a.on("mouseenter",$.proxy(c.show,c)),a.on("mouseleave",$.proxy(c.hide,c));break;case"focus":a.on("focusin",$.proxy(c.show,c
 )),a.on("focusout",$.proxy(c.hide,c));break;case"manual":c.data.addObserver("show",c,function(a,b){var c;c=a.get(b),c?this.show():this.hide()}),c.data.show&&this.show()}this.willSetup=!1},popovers:[],tooltips:[],showing:{},timeout:null,showTip:function(a){var b,c,d;b=this.registeredTips[a].data,d=this.registeredTips[a].type,this.showing[a]||(this.showing[a]=!0,c=Ember.Object.create({data:b,tip_id:a}),"tooltip"===d?this.tooltips.pushObject(c):this.popovers.pushObject(c))},hideTip:function(a,b){var c;this.showing[a]&&(c=this.registeredTips[a].data,b&&c.sticky?this.timedRemove(a):this.removeTip(a))},toggleTip:function(a){this.showing[a]?this.hideTip(a):this.showTip(a)},timedRemove:function(a){var b;b=this,this.timeout=setTimeout(function(){b.removeTip(a)},100)},removeTip:function(a){var b;b=this.popovers.findProperty("tip_id",a)||this.tooltips.findProperty("tip_id"),this.popovers.removeObject(b),this.tooltips.removeObject(b),delete this.showing[a]},addFromView:function(a,b,c){var d,e;r
 eturn a.attributeBindings.contains(Bootstrap.TooltipBoxManager.attribute)?(e={data:{view:a}},d=Bootstrap.TooltipBoxManager.registerTip(b,c,e),a.set(Bootstrap.TooltipBoxManager.attribute,d),void 0):(console.warn('TooltipBoxManager.addFromView: You need to add "TooltipBoxManager.attribute" to the attributeBindings!'),void 0)},helper:function(a,b,c){var d,e,f,g,h,i,j;if("string"==typeof a&&""!==a&&(h=a.split("."),e=h[0],g=c.data.keywords[e],g?(h.removeAt(0),h.insertAt(0,"this"),h=h.join("."),b=g.get(h)):b=this.get(a)),a instanceof Object){b=Ember.Object.create({});for(f in a.hash)j=a.hash[f],i=c.hashTypes[f],"STRING"===i?b.set(f,j):"ID"===i&&(h=j.split("."),e=h[0],g=c.data.keywords[e],g?h.removeAt(0):g=this,b._bindings||(b._bindings=g),h.insertAt(0,"_bindings"),h=h.join("."),b[f]="",d=Ember.Binding.from(h).to(f),d.connect(b))}return b}}),Ember.Handlebars.registerHelper("bs-bind-popover",function(a){var b,c,d;return d=arguments[arguments.length-1],c=this,c=Bootstrap.TooltipBoxManager.he
 lper.call(this,a,c,d),b=Bootstrap.TooltipBoxManager.registerTip("popover",c,d),new Ember.Handlebars.SafeString(Bootstrap.TooltipBoxManager.attribute+"='"+b+"'")}),Ember.Handlebars.registerHelper("bs-bind-tooltip",function(a){var b,c,d;return d=arguments[arguments.length-1],c=this,c=Bootstrap.TooltipBoxManager.helper.call(this,a,c,d),b=Bootstrap.TooltipBoxManager.registerTip("tooltip",c,d),new Ember.Handlebars.SafeString(Bootstrap.TooltipBoxManager.attribute+"='"+b+"'")})}.call(this);

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/console-polyfill.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/console-polyfill.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/console-polyfill.js
deleted file mode 100755
index 615d1f9..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/console-polyfill.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Console-polyfill. MIT license.
-// https://github.com/paulmillr/console-polyfill
-// Make it safe to do console.log() always.
-(function (con) {
-  var method;
-  var dummy = function() {};
-  var methods = ('assert,count,debug,dir,dirxml,error,exception,group,' +
-     'groupCollapsed,groupEnd,info,log,markTimeline,profile,profileEnd,' +
-     'time,timeEnd,trace,warn').split(',');
-  while (method = methods.pop()) {
-    con[method] = con[method] || dummy;
-  }
-})(window.console = window.console || {});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/cubism.v1.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/cubism.v1.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/cubism.v1.js
deleted file mode 100644
index be9ff4d..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/cubism.v1.js
+++ /dev/null
@@ -1,1085 +0,0 @@
-(function (exports) {
-  var cubism = exports.cubism = {version:"1.2.0"};
-  var cubism_id = 0;
-
-  function cubism_identity(d) {
-    return d;
-  }
-
-  cubism.option = function (name, defaultValue) {
-    var values = cubism.options(name);
-    return values.length ? values[0] : defaultValue;
-  };
-
-  cubism.options = function (name, defaultValues) {
-    var options = location.search.substring(1).split("&"),
-      values = [],
-      i = -1,
-      n = options.length,
-      o;
-    while (++i < n) {
-      if ((o = options[i].split("="))[0] == name) {
-        values.push(decodeURIComponent(o[1]));
-      }
-    }
-    return values.length || arguments.length < 2 ? values : defaultValues;
-  };
-  cubism.context = function () {
-    var context = new cubism_context,
-      step = 1e4, // ten seconds, in milliseconds
-      size = 1440, // four hours at ten seconds, in pixels
-      start0, stop0, // the start and stop for the previous change event
-      start1, stop1, // the start and stop for the next prepare event
-      serverDelay = 5e3,
-      clientDelay = 5e3,
-      event = d3.dispatch("prepare", "beforechange", "change", "focus"),
-      scale = context.scale = d3.time.scale().range([0, size]),
-      timeout,
-      focus;
-
-    function update() {
-      var now = Date.now();
-      stop0 = new Date(Math.floor((now - serverDelay - clientDelay) / step) * step);
-      start0 = new Date(stop0 - size * step);
-      stop1 = new Date(Math.floor((now - serverDelay) / step) * step);
-      start1 = new Date(stop1 - size * step);
-      scale.domain([start0, stop0]);
-      return context;
-    }
-
-    context.start = function () {
-      if (timeout) clearTimeout(timeout);
-      var delay = +stop1 + serverDelay - Date.now();
-
-      // If we're too late for the first prepare event, skip it.
-      if (delay < clientDelay) delay += step;
-
-      timeout = setTimeout(function prepare() {
-        stop1 = new Date(Math.floor((Date.now() - serverDelay) / step) * step);
-        start1 = new Date(stop1 - size * step);
-        event.prepare.call(context, start1, stop1);
-
-        setTimeout(function () {
-          scale.domain([start0 = start1, stop0 = stop1]);
-          event.beforechange.call(context, start1, stop1);
-          event.change.call(context, start1, stop1);
-          event.focus.call(context, focus);
-        }, clientDelay);
-
-        timeout = setTimeout(prepare, step);
-      }, delay);
-      return context;
-    };
-
-    context.stop = function () {
-      timeout = clearTimeout(timeout);
-      return context;
-    };
-
-    timeout = setTimeout(context.start, 10);
-
-    // Set or get the step interval in milliseconds.
-    // Defaults to ten seconds.
-    context.step = function (_) {
-      if (!arguments.length) return step;
-      step = +_;
-      return update();
-    };
-
-    // Set or get the context size (the count of metric values).
-    // Defaults to 1440 (four hours at ten seconds).
-    context.size = function (_) {
-      if (!arguments.length) return size;
-      scale.range([0, size = +_]);
-      return update();
-    };
-
-    // The server delay is the amount of time we wait for the server to compute a
-    // metric. This delay may result from clock skew or from delays collecting
-    // metrics from various hosts. Defaults to 4 seconds.
-    context.serverDelay = function (_) {
-      if (!arguments.length) return serverDelay;
-      serverDelay = +_;
-      return update();
-    };
-
-    // The client delay is the amount of additional time we wait to fetch those
-    // metrics from the server. The client and server delay combined represent the
-    // age of the most recent displayed metric. Defaults to 1 second.
-    context.clientDelay = function (_) {
-      if (!arguments.length) return clientDelay;
-      clientDelay = +_;
-      return update();
-    };
-
-    // Sets the focus to the specified index, and dispatches a "focus" event.
-    context.focus = function (i) {
-      event.focus.call(context, focus = i);
-      return context;
-    };
-
-    // Add, remove or get listeners for events.
-    context.on = function (type, listener) {
-      if (arguments.length < 2) return event.on(type);
-
-      event.on(type, listener);
-
-      // Notify the listener of the current start and stop time, as appropriate.
-      // This way, metrics can make requests for data immediately,
-      // and likewise the axis can display itself synchronously.
-      if (listener != null) {
-        if (/^prepare(\.|$)/.test(type)) listener.call(context, start1, stop1);
-        if (/^beforechange(\.|$)/.test(type)) listener.call(context, start0, stop0);
-        if (/^change(\.|$)/.test(type)) listener.call(context, start0, stop0);
-        if (/^focus(\.|$)/.test(type)) listener.call(context, focus);
-      }
-
-      return context;
-    };
-
-    d3.select(window).on("keydown.context-" + ++cubism_id, function () {
-      switch (!d3.event.metaKey && d3.event.keyCode) {
-        case 37: // left
-          if (focus == null) focus = size - 1;
-          if (focus > 0) context.focus(--focus);
-          break;
-        case 39: // right
-          if (focus == null) focus = size - 2;
-          if (focus < size - 1) context.focus(++focus);
-          break;
-        default:
-          return;
-      }
-      d3.event.preventDefault();
-    });
-
-    return update();
-  };
-
-  function cubism_context() {
-  }
-
-  var cubism_contextPrototype = cubism.context.prototype = cubism_context.prototype;
-
-  cubism_contextPrototype.constant = function (value) {
-    return new cubism_metricConstant(this, +value);
-  };
-  cubism_contextPrototype.cube = function (host) {
-    if (!arguments.length) host = "";
-    var source = {},
-      context = this;
-
-    source.metric = function (expression) {
-      return context.metric(function (start, stop, step, callback) {
-        d3.json(host + "/1.0/metric"
-          + "?expression=" + encodeURIComponent(expression)
-          + "&start=" + cubism_cubeFormatDate(start)
-          + "&stop=" + cubism_cubeFormatDate(stop)
-          + "&step=" + step, function (data) {
-          if (!data) return callback(new Error("unable to load data"));
-          callback(null, data.map(function (d) {
-            return d.value;
-          }));
-        });
-      }, expression += "");
-    };
-
-    // Returns the Cube host.
-    source.toString = function () {
-      return host;
-    };
-
-    return source;
-  };
-
-  var cubism_cubeFormatDate = d3.time.format.iso;
-  cubism_contextPrototype.graphite = function (host) {
-    if (!arguments.length) host = "";
-    var source = {},
-      context = this;
-
-    source.metric = function (expression) {
-      var sum = "sum";
-
-      var metric = context.metric(function (start, stop, step, callback) {
-        var target = expression;
-
-        // Apply the summarize, if necessary.
-        if (step !== 1e4) target = "summarize(" + target + ",'"
-          + (!(step % 36e5) ? step / 36e5 + "hour" : !(step % 6e4) ? step / 6e4 + "min" : step + "sec")
-          + "','" + sum + "')";
-
-        d3.text(host + "/render?format=raw"
-          + "&target=" + encodeURIComponent("alias(" + target + ",'')")
-          + "&from=" + cubism_graphiteFormatDate(start - 2 * step) // off-by-two?
-          + "&until=" + cubism_graphiteFormatDate(stop - 1000), function (text) {
-          if (!text) return callback(new Error("unable to load data"));
-          callback(null, cubism_graphiteParse(text));
-        });
-      }, expression += "");
-
-      metric.summarize = function (_) {
-        sum = _;
-        return metric;
-      };
-
-      return metric;
-    };
-
-    source.find = function (pattern, callback) {
-      d3.json(host + "/metrics/find?format=completer"
-        + "&query=" + encodeURIComponent(pattern), function (result) {
-        if (!result) return callback(new Error("unable to find metrics"));
-        callback(null, result.metrics.map(function (d) {
-          return d.path;
-        }));
-      });
-    };
-
-    // Returns the graphite host.
-    source.toString = function () {
-      return host;
-    };
-
-    return source;
-  };
-
-// Graphite understands seconds since UNIX epoch.
-  function cubism_graphiteFormatDate(time) {
-    return Math.floor(time / 1000);
-  }
-
-// Helper method for parsing graphite's raw format.
-  function cubism_graphiteParse(text) {
-    var i = text.indexOf("|"),
-      meta = text.substring(0, i),
-      c = meta.lastIndexOf(","),
-      b = meta.lastIndexOf(",", c - 1),
-      a = meta.lastIndexOf(",", b - 1),
-      start = meta.substring(a + 1, b) * 1000,
-      step = meta.substring(c + 1) * 1000;
-    return text
-      .substring(i + 1)
-      .split(",")
-      .slice(1)// the first value is always None?
-      .map(function (d) {
-        return +d;
-      });
-  }
-
-  function cubism_metric(context) {
-    if (!(context instanceof cubism_context)) throw new Error("invalid context");
-    this.context = context;
-  }
-
-  var cubism_metricPrototype = cubism_metric.prototype;
-
-  cubism.metric = cubism_metric;
-
-  cubism_metricPrototype.valueAt = function () {
-    return NaN;
-  };
-
-  cubism_metricPrototype.alias = function (name) {
-    this.toString = function () {
-      return name;
-    };
-    return this;
-  };
-
-  cubism_metricPrototype.extent = function () {
-    var i = 0,
-      n = this.context.size(),
-      value,
-      min = Infinity,
-      max = -Infinity;
-    while (++i < n) {
-      value = this.valueAt(i);
-      if (value < min) min = value;
-      if (value > max) max = value;
-    }
-    return [min, max];
-  };
-
-  cubism_metricPrototype.on = function (type, listener) {
-    return arguments.length < 2 ? null : this;
-  };
-
-  cubism_metricPrototype.shift = function () {
-    return this;
-  };
-
-  cubism_metricPrototype.on = function () {
-    return arguments.length < 2 ? null : this;
-  };
-
-  cubism_contextPrototype.metric = function (request, name) {
-    var context = this,
-      metric = new cubism_metric(context),
-      id = ".metric-" + ++cubism_id,
-      start = -Infinity,
-      stop,
-      step = context.step(),
-      size = context.size(),
-      values = [],
-      event = d3.dispatch("change"),
-      listening = 0,
-      fetching;
-
-    // Prefetch new data into a temporary array.
-    function prepare(start1, stop) {
-      var steps = Math.min(size, Math.round((start1 - start) / step));
-      if (!steps || fetching) return; // already fetched, or fetching!
-      fetching = true;
-      steps = Math.min(size, steps + cubism_metricOverlap);
-      var start0 = new Date(stop - steps * step);
-      request(start0, stop, step, function (error, data) {
-        fetching = false;
-        if (error) return console.warn(error);
-        var i = isFinite(start) ? Math.round((start0 - start) / step) : 0;
-        for (var j = 0, m = data.length; j < m; ++j) values[j + i] = data[j];
-        event.change.call(metric, start, stop);
-      });
-    }
-
-    // When the context changes, switch to the new data, ready-or-not!
-    function beforechange(start1, stop1) {
-      if (!isFinite(start)) start = start1;
-      values.splice(0, Math.max(0, Math.min(size, Math.round((start1 - start) / step))));
-      start = start1;
-      stop = stop1;
-    }
-
-    //
-    metric.valueAt = function (i) {
-      return values[i];
-    };
-
-    //
-    metric.shift = function (offset) {
-      return context.metric(cubism_metricShift(request, +offset));
-    };
-
-    //
-    metric.on = function (type, listener) {
-      if (!arguments.length) return event.on(type);
-
-      // If there are no listeners, then stop listening to the context,
-      // and avoid unnecessary fetches.
-      if (listener == null) {
-        if (event.on(type) != null && --listening == 0) {
-          context.on("prepare" + id, null).on("beforechange" + id, null);
-        }
-      } else {
-        if (event.on(type) == null && ++listening == 1) {
-          context.on("prepare" + id, prepare).on("beforechange" + id, beforechange);
-        }
-      }
-
-      event.on(type, listener);
-
-      // Notify the listener of the current start and stop time, as appropriate.
-      // This way, charts can display synchronous metrics immediately.
-      if (listener != null) {
-        if (/^change(\.|$)/.test(type)) listener.call(context, start, stop);
-      }
-
-      return metric;
-    };
-
-    //
-    if (arguments.length > 1) metric.toString = function () {
-      return name;
-    };
-
-    return metric;
-  };
-
-// Number of metric to refetch each period, in case of lag.
-  var cubism_metricOverlap = 6;
-
-// Wraps the specified request implementation, and shifts time by the given offset.
-  function cubism_metricShift(request, offset) {
-    return function (start, stop, step, callback) {
-      request(new Date(+start + offset), new Date(+stop + offset), step, callback);
-    };
-  }
-
-  function cubism_metricConstant(context, value) {
-    cubism_metric.call(this, context);
-    value = +value;
-    var name = value + "";
-    this.valueOf = function () {
-      return value;
-    };
-    this.toString = function () {
-      return name;
-    };
-  }
-
-  var cubism_metricConstantPrototype = cubism_metricConstant.prototype = Object.create(cubism_metric.prototype);
-
-  cubism_metricConstantPrototype.valueAt = function () {
-    return +this;
-  };
-
-  cubism_metricConstantPrototype.extent = function () {
-    return [+this, +this];
-  };
-  function cubism_metricOperator(name, operate) {
-
-    function cubism_metricOperator(left, right) {
-      if (!(right instanceof cubism_metric)) right = new cubism_metricConstant(left.context, right);
-      else if (left.context !== right.context) throw new Error("mismatch context");
-      cubism_metric.call(this, left.context);
-      this.left = left;
-      this.right = right;
-      this.toString = function () {
-        return left + " " + name + " " + right;
-      };
-    }
-
-    var cubism_metricOperatorPrototype = cubism_metricOperator.prototype = Object.create(cubism_metric.prototype);
-
-    cubism_metricOperatorPrototype.valueAt = function (i) {
-      return operate(this.left.valueAt(i), this.right.valueAt(i));
-    };
-
-    cubism_metricOperatorPrototype.shift = function (offset) {
-      return new cubism_metricOperator(this.left.shift(offset), this.right.shift(offset));
-    };
-
-    cubism_metricOperatorPrototype.on = function (type, listener) {
-      if (arguments.length < 2) return this.left.on(type);
-      this.left.on(type, listener);
-      this.right.on(type, listener);
-      return this;
-    };
-
-    return function (right) {
-      return new cubism_metricOperator(this, right);
-    };
-  }
-
-  cubism_metricPrototype.add = cubism_metricOperator("+", function (left, right) {
-    return left + right;
-  });
-
-  cubism_metricPrototype.subtract = cubism_metricOperator("-", function (left, right) {
-    return left - right;
-  });
-
-  cubism_metricPrototype.multiply = cubism_metricOperator("*", function (left, right) {
-    return left * right;
-  });
-
-  cubism_metricPrototype.divide = cubism_metricOperator("/", function (left, right) {
-    return left / right;
-  });
-  cubism_contextPrototype.horizon = function () {
-    var context = this,
-      mode = "offset",
-      buffer = document.createElement("canvas"),
-      width = buffer.width = context.size(),
-      height = buffer.height = 30,
-      scale = d3.scale.linear().interpolate(d3.interpolateRound),
-      metric = cubism_identity,
-      extent = null,
-      title = cubism_identity,
-      format = d3.format(".2s"),
-      colors = ["#08519c", "#3182bd", "#6baed6", "#bdd7e7", "#bae4b3", "#74c476", "#31a354", "#006d2c"];
-
-    function horizon(selection) {
-
-      selection
-        .on("mousemove.horizon", function () {
-          context.focus(d3.mouse(this)[0]);
-        })
-        .on("mouseout.horizon", function () {
-          context.focus(null);
-        });
-
-      selection.append("canvas")
-        .attr("width", width)
-        .attr("height", height);
-
-      selection.append("span")
-        .attr("class", "title")
-        .text(title);
-
-      selection.append("span")
-        .attr("class", "value");
-
-      selection.each(function (d, i) {
-        var that = this,
-          id = ++cubism_id,
-          metric_ = typeof metric === "function" ? metric.call(that, d, i) : metric,
-          colors_ = typeof colors === "function" ? colors.call(that, d, i) : colors,
-          extent_ = typeof extent === "function" ? extent.call(that, d, i) : extent,
-          start = -Infinity,
-          step = context.step(),
-          canvas = d3.select(that).select("canvas"),
-          span = d3.select(that).select(".value"),
-          max_,
-          m = colors_.length >> 1,
-          ready;
-
-        canvas.datum({id:id, metric:metric_});
-        canvas = canvas.node().getContext("2d");
-
-        function change(start1, stop) {
-          canvas.save();
-
-          // compute the new extent and ready flag
-          var extent = metric_.extent();
-          ready = extent.every(isFinite);
-          if (extent_ != null) extent = extent_;
-
-          // if this is an update (with no extent change), copy old values!
-          var i0 = 0, max = Math.max(-extent[0], extent[1]);
-          if (this === context) {
-            if (max == max_) {
-              i0 = width - cubism_metricOverlap;
-              var dx = (start1 - start) / step;
-              if (dx < width) {
-                var canvas0 = buffer.getContext("2d");
-                canvas0.clearRect(0, 0, width, height);
-                canvas0.drawImage(canvas.canvas, dx, 0, width - dx, height, 0, 0, width - dx, height);
-                canvas.clearRect(0, 0, width, height);
-                canvas.drawImage(canvas0.canvas, 0, 0);
-              }
-            }
-            start = start1;
-          }
-
-          // update the domain
-          scale.domain([0, max_ = max]);
-
-          // clear for the new data
-          canvas.clearRect(i0, 0, width - i0, height);
-
-          // record whether there are negative values to display
-          var negative;
-
-          // positive bands
-          for (var j = 0; j < m; ++j) {
-            canvas.fillStyle = colors_[m + j];
-
-            // Adjust the range based on the current band index.
-            var y0 = (j - m + 1) * height;
-            scale.range([m * height + y0, y0]);
-            y0 = scale(0);
-
-            for (var i = i0, n = width, y1; i < n; ++i) {
-              y1 = metric_.valueAt(i);
-              if (y1 <= 0) {
-                negative = true;
-                continue;
-              }
-              canvas.fillRect(i, y1 = scale(y1), 1, y0 - y1);
-            }
-          }
-
-          if (negative) {
-            // enable offset mode
-            if (mode === "offset") {
-              canvas.translate(0, height);
-              canvas.scale(1, -1);
-            }
-
-            // negative bands
-            for (var j = 0; j < m; ++j) {
-              canvas.fillStyle = colors_[m - 1 - j];
-
-              // Adjust the range based on the current band index.
-              var y0 = (j - m + 1) * height;
-              scale.range([m * height + y0, y0]);
-              y0 = scale(0);
-
-              for (var i = i0, n = width, y1; i < n; ++i) {
-                y1 = metric_.valueAt(i);
-                if (y1 >= 0) continue;
-                canvas.fillRect(i, scale(-y1), 1, y0 - scale(-y1));
-              }
-            }
-          }
-
-          canvas.restore();
-        }
-
-        function focus(i) {
-          if (i == null) i = width - 1;
-          var value = metric_.valueAt(i);
-          span.datum(value).text(isNaN(value) ? null : format);
-        }
-
-        // Update the chart when the context changes.
-        context.on("change.horizon-" + id, change);
-        context.on("focus.horizon-" + id, focus);
-
-        // Display the first metric change immediately,
-        // but defer subsequent updates to the canvas change.
-        // Note that someone still needs to listen to the metric,
-        // so that it continues to update automatically.
-        metric_.on("change.horizon-" + id, function (start, stop) {
-          change(start, stop), focus();
-          if (ready) metric_.on("change.horizon-" + id, cubism_identity);
-        });
-      });
-    }
-
-    horizon.remove = function (selection) {
-
-      selection
-        .on("mousemove.horizon", null)
-        .on("mouseout.horizon", null);
-
-      selection.selectAll("canvas")
-        .each(remove)
-        .remove();
-
-      selection.selectAll(".title,.value")
-        .remove();
-
-      function remove(d) {
-        d.metric.on("change.horizon-" + d.id, null);
-        context.on("change.horizon-" + d.id, null);
-        context.on("focus.horizon-" + d.id, null);
-      }
-    };
-
-    horizon.mode = function (_) {
-      if (!arguments.length) return mode;
-      mode = _ + "";
-      return horizon;
-    };
-
-    horizon.height = function (_) {
-      if (!arguments.length) return height;
-      buffer.height = height = +_;
-      return horizon;
-    };
-
-    horizon.metric = function (_) {
-      if (!arguments.length) return metric;
-      metric = _;
-      return horizon;
-    };
-
-    horizon.scale = function (_) {
-      if (!arguments.length) return scale;
-      scale = _;
-      return horizon;
-    };
-
-    horizon.extent = function (_) {
-      if (!arguments.length) return extent;
-      extent = _;
-      return horizon;
-    };
-
-    horizon.title = function (_) {
-      if (!arguments.length) return title;
-      title = _;
-      return horizon;
-    };
-
-    horizon.format = function (_) {
-      if (!arguments.length) return format;
-      format = _;
-      return horizon;
-    };
-
-    horizon.colors = function (_) {
-      if (!arguments.length) return colors;
-      colors = _;
-      return horizon;
-    };
-
-    return horizon;
-  };
-  cubism_contextPrototype.comparison = function () {
-    var context = this,
-      width = context.size(),
-      height = 120,
-      scale = d3.scale.linear().interpolate(d3.interpolateRound),
-      primary = function (d) {
-        return d[0];
-      },
-      secondary = function (d) {
-        return d[1];
-      },
-      extent = null,
-      title = cubism_identity,
-      formatPrimary = cubism_comparisonPrimaryFormat,
-      formatChange = cubism_comparisonChangeFormat,
-      colors = ["#9ecae1", "#225b84", "#a1d99b", "#22723a"],
-      strokeWidth = 1.5;
-
-    function comparison(selection) {
-
-      selection
-        .on("mousemove.comparison", function () {
-          context.focus(d3.mouse(this)[0]);
-        })
-        .on("mouseout.comparison", function () {
-          context.focus(null);
-        });
-
-      selection.append("canvas")
-        .attr("width", width)
-        .attr("height", height);
-
-      selection.append("span")
-        .attr("class", "title")
-        .text(title);
-
-      selection.append("span")
-        .attr("class", "value primary");
-
-      selection.append("span")
-        .attr("class", "value change");
-
-      selection.each(function (d, i) {
-        var that = this,
-          id = ++cubism_id,
-          primary_ = typeof primary === "function" ? primary.call(that, d, i) : primary,
-          secondary_ = typeof secondary === "function" ? secondary.call(that, d, i) : secondary,
-          extent_ = typeof extent === "function" ? extent.call(that, d, i) : extent,
-          div = d3.select(that),
-          canvas = div.select("canvas"),
-          spanPrimary = div.select(".value.primary"),
-          spanChange = div.select(".value.change"),
-          ready;
-
-        canvas.datum({id:id, primary:primary_, secondary:secondary_});
-        canvas = canvas.node().getContext("2d");
-
-        function change(start, stop) {
-          canvas.save();
-          canvas.clearRect(0, 0, width, height);
-
-          // update the scale
-          var primaryExtent = primary_.extent(),
-            secondaryExtent = secondary_.extent(),
-            extent = extent_ == null ? primaryExtent : extent_;
-          scale.domain(extent).range([height, 0]);
-          ready = primaryExtent.concat(secondaryExtent).every(isFinite);
-
-          // consistent overplotting
-          var round = start / context.step() & 1
-            ? cubism_comparisonRoundOdd
-            : cubism_comparisonRoundEven;
-
-          // positive changes
-          canvas.fillStyle = colors[2];
-          for (var i = 0, n = width; i < n; ++i) {
-            var y0 = scale(primary_.valueAt(i)),
-              y1 = scale(secondary_.valueAt(i));
-            if (y0 < y1) canvas.fillRect(round(i), y0, 1, y1 - y0);
-          }
-
-          // negative changes
-          canvas.fillStyle = colors[0];
-          for (i = 0; i < n; ++i) {
-            var y0 = scale(primary_.valueAt(i)),
-              y1 = scale(secondary_.valueAt(i));
-            if (y0 > y1) canvas.fillRect(round(i), y1, 1, y0 - y1);
-          }
-
-          // positive values
-          canvas.fillStyle = colors[3];
-          for (i = 0; i < n; ++i) {
-            var y0 = scale(primary_.valueAt(i)),
-              y1 = scale(secondary_.valueAt(i));
-            if (y0 <= y1) canvas.fillRect(round(i), y0, 1, strokeWidth);
-          }
-
-          // negative values
-          canvas.fillStyle = colors[1];
-          for (i = 0; i < n; ++i) {
-            var y0 = scale(primary_.valueAt(i)),
-              y1 = scale(secondary_.valueAt(i));
-            if (y0 > y1) canvas.fillRect(round(i), y0 - strokeWidth, 1, strokeWidth);
-          }
-
-          canvas.restore();
-        }
-
-        function focus(i) {
-          if (i == null) i = width - 1;
-          var valuePrimary = primary_.valueAt(i),
-            valueSecondary = secondary_.valueAt(i),
-            valueChange = (valuePrimary - valueSecondary) / valueSecondary;
-
-          spanPrimary
-            .datum(valuePrimary)
-            .text(isNaN(valuePrimary) ? null : formatPrimary);
-
-          spanChange
-            .datum(valueChange)
-            .text(isNaN(valueChange) ? null : formatChange)
-            .attr("class", "value change " + (valueChange > 0 ? "positive" : valueChange < 0 ? "negative" : ""));
-        }
-
-        // Display the first primary change immediately,
-        // but defer subsequent updates to the context change.
-        // Note that someone still needs to listen to the metric,
-        // so that it continues to update automatically.
-        primary_.on("change.comparison-" + id, firstChange);
-        secondary_.on("change.comparison-" + id, firstChange);
-        function firstChange(start, stop) {
-          change(start, stop), focus();
-          if (ready) {
-            primary_.on("change.comparison-" + id, cubism_identity);
-            secondary_.on("change.comparison-" + id, cubism_identity);
-          }
-        }
-
-        // Update the chart when the context changes.
-        context.on("change.comparison-" + id, change);
-        context.on("focus.comparison-" + id, focus);
-      });
-    }
-
-    comparison.remove = function (selection) {
-
-      selection
-        .on("mousemove.comparison", null)
-        .on("mouseout.comparison", null);
-
-      selection.selectAll("canvas")
-        .each(remove)
-        .remove();
-
-      selection.selectAll(".title,.value")
-        .remove();
-
-      function remove(d) {
-        d.primary.on("change.comparison-" + d.id, null);
-        d.secondary.on("change.comparison-" + d.id, null);
-        context.on("change.comparison-" + d.id, null);
-        context.on("focus.comparison-" + d.id, null);
-      }
-    };
-
-    comparison.height = function (_) {
-      if (!arguments.length) return height;
-      height = +_;
-      return comparison;
-    };
-
-    comparison.primary = function (_) {
-      if (!arguments.length) return primary;
-      primary = _;
-      return comparison;
-    };
-
-    comparison.secondary = function (_) {
-      if (!arguments.length) return secondary;
-      secondary = _;
-      return comparison;
-    };
-
-    comparison.scale = function (_) {
-      if (!arguments.length) return scale;
-      scale = _;
-      return comparison;
-    };
-
-    comparison.extent = function (_) {
-      if (!arguments.length) return extent;
-      extent = _;
-      return comparison;
-    };
-
-    comparison.title = function (_) {
-      if (!arguments.length) return title;
-      title = _;
-      return comparison;
-    };
-
-    comparison.formatPrimary = function (_) {
-      if (!arguments.length) return formatPrimary;
-      formatPrimary = _;
-      return comparison;
-    };
-
-    comparison.formatChange = function (_) {
-      if (!arguments.length) return formatChange;
-      formatChange = _;
-      return comparison;
-    };
-
-    comparison.colors = function (_) {
-      if (!arguments.length) return colors;
-      colors = _;
-      return comparison;
-    };
-
-    comparison.strokeWidth = function (_) {
-      if (!arguments.length) return strokeWidth;
-      strokeWidth = _;
-      return comparison;
-    };
-
-    return comparison;
-  };
-
-  var cubism_comparisonPrimaryFormat = d3.format(".2s"),
-    cubism_comparisonChangeFormat = d3.format("+.0%");
-
-  function cubism_comparisonRoundEven(i) {
-    return i & 0xfffffe;
-  }
-
-  function cubism_comparisonRoundOdd(i) {
-    return ((i + 1) & 0xfffffe) - 1;
-  }
-
-  cubism_contextPrototype.axis = function () {
-    var context = this,
-      scale = context.scale,
-      axis_ = d3.svg.axis().scale(scale);
-
-    var format = context.step() < 6e4 ? cubism_axisFormatSeconds
-      : context.step() < 864e5 ? cubism_axisFormatMinutes
-      : cubism_axisFormatDays;
-
-    function axis(selection) {
-      var id = ++cubism_id,
-        tick;
-
-      var g = selection.append("svg")
-        .datum({id:id})
-        .attr("width", context.size())
-        .attr("height", Math.max(28, -axis.tickSize()))
-        .append("g")
-        .attr("transform", "translate(0," + (axis_.orient() === "top" ? 27 : 4) + ")")
-        .call(axis_);
-
-      context.on("change.axis-" + id, function () {
-        g.call(axis_);
-        if (!tick) tick = d3.select(g.node().appendChild(g.selectAll("text").node().cloneNode(true)))
-          .style("display", "none")
-          .text(null);
-      });
-
-      context.on("focus.axis-" + id, function (i) {
-        if (tick) {
-          if (i == null) {
-            tick.style("display", "none");
-            g.selectAll("text").style("fill-opacity", null);
-          } else {
-            tick.style("display", null).attr("x", i).text(format(scale.invert(i)));
-            var dx = tick.node().getComputedTextLength() + 6;
-            g.selectAll("text").style("fill-opacity", function (d) {
-              return Math.abs(scale(d) - i) < dx ? 0 : 1;
-            });
-          }
-        }
-      });
-    }
-
-    axis.remove = function (selection) {
-
-      selection.selectAll("svg")
-        .each(remove)
-        .remove();
-
-      function remove(d) {
-        context.on("change.axis-" + d.id, null);
-        context.on("focus.axis-" + d.id, null);
-      }
-    };
-
-    return d3.rebind(axis, axis_,
-      "orient",
-      "ticks",
-      "tickSubdivide",
-      "tickSize",
-      "tickPadding",
-      "tickFormat");
-  };
-
-  var cubism_axisFormatSeconds = d3.time.format("%I:%M:%S %p"),
-    cubism_axisFormatMinutes = d3.time.format("%I:%M %p"),
-    cubism_axisFormatDays = d3.time.format("%B %d");
-  cubism_contextPrototype.rule = function () {
-    var context = this,
-      metric = cubism_identity;
-
-    function rule(selection) {
-      var id = ++cubism_id;
-
-      var line = selection.append("div")
-        .datum({id:id})
-        .attr("class", "line")
-        .call(cubism_ruleStyle);
-
-      selection.each(function (d, i) {
-        var that = this,
-          id = ++cubism_id,
-          metric_ = typeof metric === "function" ? metric.call(that, d, i) : metric;
-
-        if (!metric_) return;
-
-        function change(start, stop) {
-          var values = [];
-
-          for (var i = 0, n = context.size(); i < n; ++i) {
-            if (metric_.valueAt(i)) {
-              values.push(i);
-            }
-          }
-
-          var lines = selection.selectAll(".metric").data(values);
-          lines.exit().remove();
-          lines.enter().append("div").attr("class", "metric line").call(cubism_ruleStyle);
-          lines.style("left", cubism_ruleLeft);
-        }
-
-        context.on("change.rule-" + id, change);
-        metric_.on("change.rule-" + id, change);
-      });
-
-      context.on("focus.rule-" + id, function (i) {
-        line.datum(i)
-          .style("display", i == null ? "none" : null)
-          .style("left", cubism_ruleLeft);
-      });
-    }
-
-    rule.remove = function (selection) {
-
-      selection.selectAll(".line")
-        .each(remove)
-        .remove();
-
-      function remove(d) {
-        context.on("focus.rule-" + d.id, null);
-      }
-    };
-
-    rule.metric = function (_) {
-      if (!arguments.length) return metric;
-      metric = _;
-      return rule;
-    };
-
-    return rule;
-  };
-
-  function cubism_ruleStyle(line) {
-    line
-      .style("position", "absolute")
-      .style("top", 0)
-      .style("bottom", 0)
-      .style("width", "1px")
-      .style("pointer-events", "none");
-  }
-
-  function cubism_ruleLeft(i) {
-    return i + "px";
-  }
-})(this);


[15/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/moment.min.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/moment.min.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/moment.min.js
deleted file mode 100644
index d301ddb..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/moment.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-//! moment.js
-//! version : 2.13.0
-//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
-//! license : MIT
-//! momentjs.com
-!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){"use strict";function a(){return fd.apply(null,arguments)}function b(a){fd=a}function c(a){return a instanceof Array||"[object Array]"===Object.prototype.toString.call(a)}function d(a){return a instanceof Date||"[object Date]"===Object.prototype.toString.call(a)}function e(a,b){var c,d=[];for(c=0;c<a.length;++c)d.push(b(a[c],c));return d}function f(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function g(a,b){for(var c in b)f(b,c)&&(a[c]=b[c]);return f(b,"toString")&&(a.toString=b.toString),f(b,"valueOf")&&(a.valueOf=b.valueOf),a}function h(a,b,c,d){return Ja(a,b,c,d,!0).utc()}function i(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null}}function j(a){return null==a._pf&&(a._pf=i()
 ),a._pf}function k(a){if(null==a._isValid){var b=j(a),c=gd.call(b.parsedDateParts,function(a){return null!=a});a._isValid=!isNaN(a._d.getTime())&&b.overflow<0&&!b.empty&&!b.invalidMonth&&!b.invalidWeekday&&!b.nullInput&&!b.invalidFormat&&!b.userInvalidated&&(!b.meridiem||b.meridiem&&c),a._strict&&(a._isValid=a._isValid&&0===b.charsLeftOver&&0===b.unusedTokens.length&&void 0===b.bigHour)}return a._isValid}function l(a){var b=h(NaN);return null!=a?g(j(b),a):j(b).userInvalidated=!0,b}function m(a){return void 0===a}function n(a,b){var c,d,e;if(m(b._isAMomentObject)||(a._isAMomentObject=b._isAMomentObject),m(b._i)||(a._i=b._i),m(b._f)||(a._f=b._f),m(b._l)||(a._l=b._l),m(b._strict)||(a._strict=b._strict),m(b._tzm)||(a._tzm=b._tzm),m(b._isUTC)||(a._isUTC=b._isUTC),m(b._offset)||(a._offset=b._offset),m(b._pf)||(a._pf=j(b)),m(b._locale)||(a._locale=b._locale),hd.length>0)for(c in hd)d=hd[c],e=b[d],m(e)||(a[d]=e);return a}function o(b){n(this,b),this._d=new Date(null!=b._d?b._d.getTime():NaN
 ),id===!1&&(id=!0,a.updateOffset(this),id=!1)}function p(a){return a instanceof o||null!=a&&null!=a._isAMomentObject}function q(a){return 0>a?Math.ceil(a):Math.floor(a)}function r(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=q(b)),c}function s(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;e>d;d++)(c&&a[d]!==b[d]||!c&&r(a[d])!==r(b[d]))&&g++;return g+f}function t(b){a.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+b)}function u(b,c){var d=!0;return g(function(){return null!=a.deprecationHandler&&a.deprecationHandler(null,b),d&&(t(b+"\nArguments: "+Array.prototype.slice.call(arguments).join(", ")+"\n"+(new Error).stack),d=!1),c.apply(this,arguments)},c)}function v(b,c){null!=a.deprecationHandler&&a.deprecationHandler(b,c),jd[b]||(t(c),jd[b]=!0)}function w(a){return a instanceof Function||"[object Function]"===Object.prototype.toString.call(a)}function x(a){return"[object Object]"
 ===Object.prototype.toString.call(a)}function y(a){var b,c;for(c in a)b=a[c],w(b)?this[c]=b:this["_"+c]=b;this._config=a,this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function z(a,b){var c,d=g({},a);for(c in b)f(b,c)&&(x(a[c])&&x(b[c])?(d[c]={},g(d[c],a[c]),g(d[c],b[c])):null!=b[c]?d[c]=b[c]:delete d[c]);return d}function A(a){null!=a&&this.set(a)}function B(a){return a?a.toLowerCase().replace("_","-"):a}function C(a){for(var b,c,d,e,f=0;f<a.length;){for(e=B(a[f]).split("-"),b=e.length,c=B(a[f+1]),c=c?c.split("-"):null;b>0;){if(d=D(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&s(e,c,!0)>=b-1)break;b--}f++}return null}function D(a){var b=null;if(!nd[a]&&"undefined"!=typeof module&&module&&module.exports)try{b=ld._abbr,require("./locale/"+a),E(b)}catch(c){}return nd[a]}function E(a,b){var c;return a&&(c=m(b)?H(a):F(a,b),c&&(ld=c)),ld._abbr}function F(a,b){return null!==b?(b.abbr=a,null!=nd[a]?(v("defineLocaleOverride","use moment.updateLoca
 le(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale"),b=z(nd[a]._config,b)):null!=b.parentLocale&&(null!=nd[b.parentLocale]?b=z(nd[b.parentLocale]._config,b):v("parentLocaleUndefined","specified parentLocale is not defined yet")),nd[a]=new A(b),E(a),nd[a]):(delete nd[a],null)}function G(a,b){if(null!=b){var c;null!=nd[a]&&(b=z(nd[a]._config,b)),c=new A(b),c.parentLocale=nd[a],nd[a]=c,E(a)}else null!=nd[a]&&(null!=nd[a].parentLocale?nd[a]=nd[a].parentLocale:null!=nd[a]&&delete nd[a]);return nd[a]}function H(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return ld;if(!c(a)){if(b=D(a))return b;a=[a]}return C(a)}function I(){return kd(nd)}function J(a,b){var c=a.toLowerCase();od[c]=od[c+"s"]=od[b]=a}function K(a){return"string"==typeof a?od[a]||od[a.toLowerCase()]:void 0}function L(a){var b,c,d={};for(c in a)f(a,c)&&(b=K(c),b&&(d[b]=a[c]));return d}function M(b,c){return function(d)
 {return null!=d?(O(this,b,d),a.updateOffset(this,c),this):N(this,b)}}function N(a,b){return a.isValid()?a._d["get"+(a._isUTC?"UTC":"")+b]():NaN}function O(a,b,c){a.isValid()&&a._d["set"+(a._isUTC?"UTC":"")+b](c)}function P(a,b){var c;if("object"==typeof a)for(c in a)this.set(c,a[c]);else if(a=K(a),w(this[a]))return this[a](b);return this}function Q(a,b,c){var d=""+Math.abs(a),e=b-d.length,f=a>=0;return(f?c?"+":"":"-")+Math.pow(10,Math.max(0,e)).toString().substr(1)+d}function R(a,b,c,d){var e=d;"string"==typeof d&&(e=function(){return this[d]()}),a&&(sd[a]=e),b&&(sd[b[0]]=function(){return Q(e.apply(this,arguments),b[1],b[2])}),c&&(sd[c]=function(){return this.localeData().ordinal(e.apply(this,arguments),a)})}function S(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function T(a){var b,c,d=a.match(pd);for(b=0,c=d.length;c>b;b++)sd[d[b]]?d[b]=sd[d[b]]:d[b]=S(d[b]);return function(b){var e,f="";for(e=0;c>e;e++)f+=d[e]instanceof Function?d[e].call(b,a):d[e];
 return f}}function U(a,b){return a.isValid()?(b=V(b,a.localeData()),rd[b]=rd[b]||T(b),rd[b](a)):a.localeData().invalidDate()}function V(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(qd.lastIndex=0;d>=0&&qd.test(a);)a=a.replace(qd,c),qd.lastIndex=0,d-=1;return a}function W(a,b,c){Kd[a]=w(b)?b:function(a,d){return a&&c?c:b}}function X(a,b){return f(Kd,a)?Kd[a](b._strict,b._locale):new RegExp(Y(a))}function Y(a){return Z(a.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e}))}function Z(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function $(a,b){var c,d=b;for("string"==typeof a&&(a=[a]),"number"==typeof b&&(d=function(a,c){c[b]=r(a)}),c=0;c<a.length;c++)Ld[a[c]]=d}function _(a,b){$(a,function(a,c,d,e){d._w=d._w||{},b(a,d._w,d,e)})}function aa(a,b,c){null!=b&&f(Ld,a)&&Ld[a](b,c._a,c,a)}function ba(a,b){return new Date(Date.UTC(a,b+1,0)).getUTCDate()}function ca(a,b){return c(this._months)?this._months[a.month()]:t
 his._months[Vd.test(b)?"format":"standalone"][a.month()]}function da(a,b){return c(this._monthsShort)?this._monthsShort[a.month()]:this._monthsShort[Vd.test(b)?"format":"standalone"][a.month()]}function ea(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],d=0;12>d;++d)f=h([2e3,d]),this._shortMonthsParse[d]=this.monthsShort(f,"").toLocaleLowerCase(),this._longMonthsParse[d]=this.months(f,"").toLocaleLowerCase();return c?"MMM"===b?(e=md.call(this._shortMonthsParse,g),-1!==e?e:null):(e=md.call(this._longMonthsParse,g),-1!==e?e:null):"MMM"===b?(e=md.call(this._shortMonthsParse,g),-1!==e?e:(e=md.call(this._longMonthsParse,g),-1!==e?e:null)):(e=md.call(this._longMonthsParse,g),-1!==e?e:(e=md.call(this._shortMonthsParse,g),-1!==e?e:null))}function fa(a,b,c){var d,e,f;if(this._monthsParseExact)return ea.call(this,a,b,c);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMon
 thsParse=[]),d=0;12>d;d++){if(e=h([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp("^"+this.months(e,"").replace(".","")+"$","i"),this._shortMonthsParse[d]=new RegExp("^"+this.monthsShort(e,"").replace(".","")+"$","i")),c||this._monthsParse[d]||(f="^"+this.months(e,"")+"|^"+this.monthsShort(e,""),this._monthsParse[d]=new RegExp(f.replace(".",""),"i")),c&&"MMMM"===b&&this._longMonthsParse[d].test(a))return d;if(c&&"MMM"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}}function ga(a,b){var c;if(!a.isValid())return a;if("string"==typeof b)if(/^\d+$/.test(b))b=r(b);else if(b=a.localeData().monthsParse(b),"number"!=typeof b)return a;return c=Math.min(a.date(),ba(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a}function ha(b){return null!=b?(ga(this,b),a.updateOffset(this,!0),this):N(this,"Month")}function ia(){return ba(this.year(),this.month())}function ja(a){return this._monthsParseExact?(f(this,"_months
 Regex")||la.call(this),a?this._monthsShortStrictRegex:this._monthsShortRegex):this._monthsShortStrictRegex&&a?this._monthsShortStrictRegex:this._monthsShortRegex}function ka(a){return this._monthsParseExact?(f(this,"_monthsRegex")||la.call(this),a?this._monthsStrictRegex:this._monthsRegex):this._monthsStrictRegex&&a?this._monthsStrictRegex:this._monthsRegex}function la(){function a(a,b){return b.length-a.length}var b,c,d=[],e=[],f=[];for(b=0;12>b;b++)c=h([2e3,b]),d.push(this.monthsShort(c,"")),e.push(this.months(c,"")),f.push(this.months(c,"")),f.push(this.monthsShort(c,""));for(d.sort(a),e.sort(a),f.sort(a),b=0;12>b;b++)d[b]=Z(d[b]),e[b]=Z(e[b]),f[b]=Z(f[b]);this._monthsRegex=new RegExp("^("+f.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+e.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+d.join("|")+")","i")}function ma(a){var b,c=a._a;return c&&-2===j(a).overflow&&(b=c[Nd]<0||c[Nd]>11?Nd:c[Od]<1||c[Od]>ba(c[Md],
 c[Nd])?Od:c[Pd]<0||c[Pd]>24||24===c[Pd]&&(0!==c[Qd]||0!==c[Rd]||0!==c[Sd])?Pd:c[Qd]<0||c[Qd]>59?Qd:c[Rd]<0||c[Rd]>59?Rd:c[Sd]<0||c[Sd]>999?Sd:-1,j(a)._overflowDayOfYear&&(Md>b||b>Od)&&(b=Od),j(a)._overflowWeeks&&-1===b&&(b=Td),j(a)._overflowWeekday&&-1===b&&(b=Ud),j(a).overflow=b),a}function na(a){var b,c,d,e,f,g,h=a._i,i=$d.exec(h)||_d.exec(h);if(i){for(j(a).iso=!0,b=0,c=be.length;c>b;b++)if(be[b][1].exec(i[1])){e=be[b][0],d=be[b][2]!==!1;break}if(null==e)return void(a._isValid=!1);if(i[3]){for(b=0,c=ce.length;c>b;b++)if(ce[b][1].exec(i[3])){f=(i[2]||" ")+ce[b][0];break}if(null==f)return void(a._isValid=!1)}if(!d&&null!=f)return void(a._isValid=!1);if(i[4]){if(!ae.exec(i[4]))return void(a._isValid=!1);g="Z"}a._f=e+(f||"")+(g||""),Ca(a)}else a._isValid=!1}function oa(b){var c=de.exec(b._i);return null!==c?void(b._d=new Date(+c[1])):(na(b),void(b._isValid===!1&&(delete b._isValid,a.createFromInputFallback(b))))}function pa(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return 100>a&&a>
 =0&&isFinite(h.getFullYear())&&h.setFullYear(a),h}function qa(a){var b=new Date(Date.UTC.apply(null,arguments));return 100>a&&a>=0&&isFinite(b.getUTCFullYear())&&b.setUTCFullYear(a),b}function ra(a){return sa(a)?366:365}function sa(a){return a%4===0&&a%100!==0||a%400===0}function ta(){return sa(this.year())}function ua(a,b,c){var d=7+b-c,e=(7+qa(a,0,d).getUTCDay()-b)%7;return-e+d-1}function va(a,b,c,d,e){var f,g,h=(7+c-d)%7,i=ua(a,d,e),j=1+7*(b-1)+h+i;return 0>=j?(f=a-1,g=ra(f)+j):j>ra(a)?(f=a+1,g=j-ra(a)):(f=a,g=j),{year:f,dayOfYear:g}}function wa(a,b,c){var d,e,f=ua(a.year(),b,c),g=Math.floor((a.dayOfYear()-f-1)/7)+1;return 1>g?(e=a.year()-1,d=g+xa(e,b,c)):g>xa(a.year(),b,c)?(d=g-xa(a.year(),b,c),e=a.year()+1):(e=a.year(),d=g),{week:d,year:e}}function xa(a,b,c){var d=ua(a,b,c),e=ua(a+1,b,c);return(ra(a)-d+e)/7}function ya(a,b,c){return null!=a?a:null!=b?b:c}function za(b){var c=new Date(a.now());return b._useUTC?[c.getUTCFullYear(),c.getUTCMonth(),c.getUTCDate()]:[c.getFullYear(),
 c.getMonth(),c.getDate()]}function Aa(a){var b,c,d,e,f=[];if(!a._d){for(d=za(a),a._w&&null==a._a[Od]&&null==a._a[Nd]&&Ba(a),a._dayOfYear&&(e=ya(a._a[Md],d[Md]),a._dayOfYear>ra(e)&&(j(a)._overflowDayOfYear=!0),c=qa(e,0,a._dayOfYear),a._a[Nd]=c.getUTCMonth(),a._a[Od]=c.getUTCDate()),b=0;3>b&&null==a._a[b];++b)a._a[b]=f[b]=d[b];for(;7>b;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b];24===a._a[Pd]&&0===a._a[Qd]&&0===a._a[Rd]&&0===a._a[Sd]&&(a._nextDay=!0,a._a[Pd]=0),a._d=(a._useUTC?qa:pa).apply(null,f),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[Pd]=24)}}function Ba(a){var b,c,d,e,f,g,h,i;b=a._w,null!=b.GG||null!=b.W||null!=b.E?(f=1,g=4,c=ya(b.GG,a._a[Md],wa(Ka(),1,4).year),d=ya(b.W,1),e=ya(b.E,1),(1>e||e>7)&&(i=!0)):(f=a._locale._week.dow,g=a._locale._week.doy,c=ya(b.gg,a._a[Md],wa(Ka(),f,g).year),d=ya(b.w,1),null!=b.d?(e=b.d,(0>e||e>6)&&(i=!0)):null!=b.e?(e=b.e+f,(b.e<0||b.e>6)&&(i=!0)):e=f),1>d||d>xa(c,f,g)?j(a)._overflowWeeks=!0:null!=i?j(a)._ov
 erflowWeekday=!0:(h=va(c,d,e,f,g),a._a[Md]=h.year,a._dayOfYear=h.dayOfYear)}function Ca(b){if(b._f===a.ISO_8601)return void na(b);b._a=[],j(b).empty=!0;var c,d,e,f,g,h=""+b._i,i=h.length,k=0;for(e=V(b._f,b._locale).match(pd)||[],c=0;c<e.length;c++)f=e[c],d=(h.match(X(f,b))||[])[0],d&&(g=h.substr(0,h.indexOf(d)),g.length>0&&j(b).unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),k+=d.length),sd[f]?(d?j(b).empty=!1:j(b).unusedTokens.push(f),aa(f,d,b)):b._strict&&!d&&j(b).unusedTokens.push(f);j(b).charsLeftOver=i-k,h.length>0&&j(b).unusedInput.push(h),j(b).bigHour===!0&&b._a[Pd]<=12&&b._a[Pd]>0&&(j(b).bigHour=void 0),j(b).parsedDateParts=b._a.slice(0),j(b).meridiem=b._meridiem,b._a[Pd]=Da(b._locale,b._a[Pd],b._meridiem),Aa(b),ma(b)}function Da(a,b,c){var d;return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&12>b&&(b+=12),d||12!==b||(b=0),b):b}function Ea(a){var b,c,d,e,f;if(0===a._f.length)return j(a).invalidFormat=!0,void(a._d=new Date(NaN));for(e=
 0;e<a._f.length;e++)f=0,b=n({},a),null!=a._useUTC&&(b._useUTC=a._useUTC),b._f=a._f[e],Ca(b),k(b)&&(f+=j(b).charsLeftOver,f+=10*j(b).unusedTokens.length,j(b).score=f,(null==d||d>f)&&(d=f,c=b));g(a,c||b)}function Fa(a){if(!a._d){var b=L(a._i);a._a=e([b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],function(a){return a&&parseInt(a,10)}),Aa(a)}}function Ga(a){var b=new o(ma(Ha(a)));return b._nextDay&&(b.add(1,"d"),b._nextDay=void 0),b}function Ha(a){var b=a._i,e=a._f;return a._locale=a._locale||H(a._l),null===b||void 0===e&&""===b?l({nullInput:!0}):("string"==typeof b&&(a._i=b=a._locale.preparse(b)),p(b)?new o(ma(b)):(c(e)?Ea(a):e?Ca(a):d(b)?a._d=b:Ia(a),k(a)||(a._d=null),a))}function Ia(b){var f=b._i;void 0===f?b._d=new Date(a.now()):d(f)?b._d=new Date(f.valueOf()):"string"==typeof f?oa(b):c(f)?(b._a=e(f.slice(0),function(a){return parseInt(a,10)}),Aa(b)):"object"==typeof f?Fa(b):"number"==typeof f?b._d=new Date(f):a.createFromInputFallback(b)}function Ja(a,b,c,d,e
 ){var f={};return"boolean"==typeof c&&(d=c,c=void 0),f._isAMomentObject=!0,f._useUTC=f._isUTC=e,f._l=c,f._i=a,f._f=b,f._strict=d,Ga(f)}function Ka(a,b,c,d){return Ja(a,b,c,d,!1)}function La(a,b){var d,e;if(1===b.length&&c(b[0])&&(b=b[0]),!b.length)return Ka();for(d=b[0],e=1;e<b.length;++e)(!b[e].isValid()||b[e][a](d))&&(d=b[e]);return d}function Ma(){var a=[].slice.call(arguments,0);return La("isBefore",a)}function Na(){var a=[].slice.call(arguments,0);return La("isAfter",a)}function Oa(a){var b=L(a),c=b.year||0,d=b.quarter||0,e=b.month||0,f=b.week||0,g=b.day||0,h=b.hour||0,i=b.minute||0,j=b.second||0,k=b.millisecond||0;this._milliseconds=+k+1e3*j+6e4*i+1e3*h*60*60,this._days=+g+7*f,this._months=+e+3*d+12*c,this._data={},this._locale=H(),this._bubble()}function Pa(a){return a instanceof Oa}function Qa(a,b){R(a,0,0,function(){var a=this.utcOffset(),c="+";return 0>a&&(a=-a,c="-"),c+Q(~~(a/60),2)+b+Q(~~a%60,2)})}function Ra(a,b){var c=(b||"").match(a)||[],d=c[c.length-1]||[],e=(d+"").m
 atch(ie)||["-",0,0],f=+(60*e[1])+r(e[2]);return"+"===e[0]?f:-f}function Sa(b,c){var e,f;return c._isUTC?(e=c.clone(),f=(p(b)||d(b)?b.valueOf():Ka(b).valueOf())-e.valueOf(),e._d.setTime(e._d.valueOf()+f),a.updateOffset(e,!1),e):Ka(b).local()}function Ta(a){return 15*-Math.round(a._d.getTimezoneOffset()/15)}function Ua(b,c){var d,e=this._offset||0;return this.isValid()?null!=b?("string"==typeof b?b=Ra(Hd,b):Math.abs(b)<16&&(b=60*b),!this._isUTC&&c&&(d=Ta(this)),this._offset=b,this._isUTC=!0,null!=d&&this.add(d,"m"),e!==b&&(!c||this._changeInProgress?jb(this,db(b-e,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?e:Ta(this):null!=b?this:NaN}function Va(a,b){return null!=a?("string"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function Wa(a){return this.utcOffset(0,a)}function Xa(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Ta(this),"m")),this}function Ya(
 ){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Ra(Gd,this._i)),this}function Za(a){return this.isValid()?(a=a?Ka(a).utcOffset():0,(this.utcOffset()-a)%60===0):!1}function $a(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function _a(){if(!m(this._isDSTShifted))return this._isDSTShifted;var a={};if(n(a,this),a=Ha(a),a._a){var b=a._isUTC?h(a._a):Ka(a._a);this._isDSTShifted=this.isValid()&&s(a._a,b.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function ab(){return this.isValid()?!this._isUTC:!1}function bb(){return this.isValid()?this._isUTC:!1}function cb(){return this.isValid()?this._isUTC&&0===this._offset:!1}function db(a,b){var c,d,e,g=a,h=null;return Pa(a)?g={ms:a._milliseconds,d:a._days,M:a._months}:"number"==typeof a?(g={},b?g[b]=a:g.milliseconds=a):(h=je.exec(a))?(c="-"===h[1]?-1:1,g={y:0,d:r(h[Od])*c,h:r(h[Pd])*c,m:r(h[Qd])*c,s:r(h[Rd])*c,ms:r(h[Sd])*c})
 :(h=ke.exec(a))?(c="-"===h[1]?-1:1,g={y:eb(h[2],c),M:eb(h[3],c),w:eb(h[4],c),d:eb(h[5],c),h:eb(h[6],c),m:eb(h[7],c),s:eb(h[8],c)}):null==g?g={}:"object"==typeof g&&("from"in g||"to"in g)&&(e=gb(Ka(g.from),Ka(g.to)),g={},g.ms=e.milliseconds,g.M=e.months),d=new Oa(g),Pa(a)&&f(a,"_locale")&&(d._locale=a._locale),d}function eb(a,b){var c=a&&parseFloat(a.replace(",","."));return(isNaN(c)?0:c)*b}function fb(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function gb(a,b){var c;return a.isValid()&&b.isValid()?(b=Sa(b,a),a.isBefore(b)?c=fb(a,b):(c=fb(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c):{milliseconds:0,months:0}}function hb(a){return 0>a?-1*Math.round(-1*a):Math.round(a)}function ib(a,b){return function(c,d){var e,f;return null===d||isNaN(+d)||(v(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(num
 ber, period)."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=db(c,d),jb(this,e,a),this}}function jb(b,c,d,e){var f=c._milliseconds,g=hb(c._days),h=hb(c._months);b.isValid()&&(e=null==e?!0:e,f&&b._d.setTime(b._d.valueOf()+f*d),g&&O(b,"Date",N(b,"Date")+g*d),h&&ga(b,N(b,"Month")+h*d),e&&a.updateOffset(b,g||h))}function kb(a,b){var c=a||Ka(),d=Sa(c,this).startOf("day"),e=this.diff(d,"days",!0),f=-6>e?"sameElse":-1>e?"lastWeek":0>e?"lastDay":1>e?"sameDay":2>e?"nextDay":7>e?"nextWeek":"sameElse",g=b&&(w(b[f])?b[f]():b[f]);return this.format(g||this.localeData().calendar(f,this,Ka(c)))}function lb(){return new o(this)}function mb(a,b){var c=p(a)?a:Ka(a);return this.isValid()&&c.isValid()?(b=K(m(b)?"millisecond":b),"millisecond"===b?this.valueOf()>c.valueOf():c.valueOf()<this.clone().startOf(b).valueOf()):!1}function nb(a,b){var c=p(a)?a:Ka(a);return this.isValid()&&c.isValid()?(b=K(m(b)?"millisecond":b),"millisecond"===b?this.valueOf()<c.valueOf():this.clone().endOf(b).valueOf()<c.valueOf()):
 !1}function ob(a,b,c,d){return d=d||"()",("("===d[0]?this.isAfter(a,c):!this.isBefore(a,c))&&(")"===d[1]?this.isBefore(b,c):!this.isAfter(b,c))}function pb(a,b){var c,d=p(a)?a:Ka(a);return this.isValid()&&d.isValid()?(b=K(b||"millisecond"),"millisecond"===b?this.valueOf()===d.valueOf():(c=d.valueOf(),this.clone().startOf(b).valueOf()<=c&&c<=this.clone().endOf(b).valueOf())):!1}function qb(a,b){return this.isSame(a,b)||this.isAfter(a,b)}function rb(a,b){return this.isSame(a,b)||this.isBefore(a,b)}function sb(a,b,c){var d,e,f,g;return this.isValid()?(d=Sa(a,this),d.isValid()?(e=6e4*(d.utcOffset()-this.utcOffset()),b=K(b),"year"===b||"month"===b||"quarter"===b?(g=tb(this,d),"quarter"===b?g/=3:"year"===b&&(g/=12)):(f=this-d,g="second"===b?f/1e3:"minute"===b?f/6e4:"hour"===b?f/36e5:"day"===b?(f-e)/864e5:"week"===b?(f-e)/6048e5:f),c?g:q(g)):NaN):NaN}function tb(a,b){var c,d,e=12*(b.year()-a.year())+(b.month()-a.month()),f=a.clone().add(e,"months");return 0>b-f?(c=a.clone().add(e-1,"months
 "),d=(b-f)/(f-c)):(c=a.clone().add(e+1,"months"),d=(b-f)/(c-f)),-(e+d)||0}function ub(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function vb(){var a=this.clone().utc();return 0<a.year()&&a.year()<=9999?w(Date.prototype.toISOString)?this.toDate().toISOString():U(a,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):U(a,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function wb(b){b||(b=this.isUtc()?a.defaultFormatUtc:a.defaultFormat);var c=U(this,b);return this.localeData().postformat(c)}function xb(a,b){return this.isValid()&&(p(a)&&a.isValid()||Ka(a).isValid())?db({to:this,from:a}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()}function yb(a){return this.from(Ka(),a)}function zb(a,b){return this.isValid()&&(p(a)&&a.isValid()||Ka(a).isValid())?db({from:this,to:a}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()}function Ab(a){return this.to(Ka(),a)}function Bb(a){var b;return void 0===a?this._locale._abbr:(b=H(a),null!=b&&(this._locale=b),thi
 s)}function Cb(){return this._locale}function Db(a){switch(a=K(a)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===a&&this.weekday(0),"isoWeek"===a&&this.isoWeekday(1),"quarter"===a&&this.month(3*Math.floor(this.month()/3)),this}function Eb(a){return a=K(a),void 0===a||"millisecond"===a?this:("date"===a&&(a="day"),this.startOf(a).add(1,"isoWeek"===a?"week":a).subtract(1,"ms"))}function Fb(){return this._d.valueOf()-6e4*(this._offset||0)}function Gb(){return Math.floor(this.valueOf()/1e3)}function Hb(){return this._offset?new Date(this.valueOf()):this._d}function Ib(){var a=this;return[a.year(),a.month(),a.date(),a.hour(),a.minute(),a.second(),a.millisecond()]}function Jb(){var a=this;return{years:a.year(),months:a.month(),date:a.date(),hours:a.hours(),minutes:a.minutes(),seconds:a.seconds(),milliseconds:a
 .milliseconds()}}function Kb(){return this.isValid()?this.toISOString():null}function Lb(){return k(this)}function Mb(){return g({},j(this))}function Nb(){return j(this).overflow}function Ob(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Pb(a,b){R(0,[a,a.length],0,b)}function Qb(a){return Ub.call(this,a,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Rb(a){return Ub.call(this,a,this.isoWeek(),this.isoWeekday(),1,4)}function Sb(){return xa(this.year(),1,4)}function Tb(){var a=this.localeData()._week;return xa(this.year(),a.dow,a.doy)}function Ub(a,b,c,d,e){var f;return null==a?wa(this,d,e).year:(f=xa(a,d,e),b>f&&(b=f),Vb.call(this,a,b,c,d,e))}function Vb(a,b,c,d,e){var f=va(a,b,c,d,e),g=qa(f.year,0,f.dayOfYear);return this.year(g.getUTCFullYear()),this.month(g.getUTCMonth()),this.date(g.getUTCDate()),this}function Wb(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1
 )+this.month()%3)}function Xb(a){return wa(a,this._week.dow,this._week.doy).week}function Yb(){return this._week.dow}function Zb(){return this._week.doy}function $b(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")}function _b(a){var b=wa(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")}function ac(a,b){return"string"!=typeof a?a:isNaN(a)?(a=b.weekdaysParse(a),"number"==typeof a?a:null):parseInt(a,10)}function bc(a,b){return c(this._weekdays)?this._weekdays[a.day()]:this._weekdays[this._weekdays.isFormat.test(b)?"format":"standalone"][a.day()]}function cc(a){return this._weekdaysShort[a.day()]}function dc(a){return this._weekdaysMin[a.day()]}function ec(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],d=0;7>d;++d)f=h([2e3,1]).day(d),this._minWeekdaysParse[d]=this.weekdaysMin(f,"").toLocaleLowerCase(),this._shortWeekdaysParse[d]=this.weekdaysShort(f,"").toL
 ocaleLowerCase(),this._weekdaysParse[d]=this.weekdays(f,"").toLocaleLowerCase();return c?"dddd"===b?(e=md.call(this._weekdaysParse,g),-1!==e?e:null):"ddd"===b?(e=md.call(this._shortWeekdaysParse,g),-1!==e?e:null):(e=md.call(this._minWeekdaysParse,g),-1!==e?e:null):"dddd"===b?(e=md.call(this._weekdaysParse,g),-1!==e?e:(e=md.call(this._shortWeekdaysParse,g),-1!==e?e:(e=md.call(this._minWeekdaysParse,g),-1!==e?e:null))):"ddd"===b?(e=md.call(this._shortWeekdaysParse,g),-1!==e?e:(e=md.call(this._weekdaysParse,g),-1!==e?e:(e=md.call(this._minWeekdaysParse,g),-1!==e?e:null))):(e=md.call(this._minWeekdaysParse,g),-1!==e?e:(e=md.call(this._weekdaysParse,g),-1!==e?e:(e=md.call(this._shortWeekdaysParse,g),-1!==e?e:null)))}function fc(a,b,c){var d,e,f;if(this._weekdaysParseExact)return ec.call(this,a,b,c);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),d=0;7>d;d++){if(e=h([2e3,1]).day(d),c&&!this._fullWeekdaysPar
 se[d]&&(this._fullWeekdaysParse[d]=new RegExp("^"+this.weekdays(e,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[d]=new RegExp("^"+this.weekdaysShort(e,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[d]=new RegExp("^"+this.weekdaysMin(e,"").replace(".",".?")+"$","i")),this._weekdaysParse[d]||(f="^"+this.weekdays(e,"")+"|^"+this.weekdaysShort(e,"")+"|^"+this.weekdaysMin(e,""),this._weekdaysParse[d]=new RegExp(f.replace(".",""),"i")),c&&"dddd"===b&&this._fullWeekdaysParse[d].test(a))return d;if(c&&"ddd"===b&&this._shortWeekdaysParse[d].test(a))return d;if(c&&"dd"===b&&this._minWeekdaysParse[d].test(a))return d;if(!c&&this._weekdaysParse[d].test(a))return d}}function gc(a){if(!this.isValid())return null!=a?this:NaN;var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=ac(a,this.localeData()),this.add(a-b,"d")):b}function hc(a){if(!this.isValid())return null!=a?this:NaN;var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d"
 )}function ic(a){return this.isValid()?null==a?this.day()||7:this.day(this.day()%7?a:a-7):null!=a?this:NaN}function jc(a){return this._weekdaysParseExact?(f(this,"_weekdaysRegex")||mc.call(this),a?this._weekdaysStrictRegex:this._weekdaysRegex):this._weekdaysStrictRegex&&a?this._weekdaysStrictRegex:this._weekdaysRegex}function kc(a){return this._weekdaysParseExact?(f(this,"_weekdaysRegex")||mc.call(this),a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):this._weekdaysShortStrictRegex&&a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex}function lc(a){return this._weekdaysParseExact?(f(this,"_weekdaysRegex")||mc.call(this),a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):this._weekdaysMinStrictRegex&&a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex}function mc(){function a(a,b){return b.length-a.length}var b,c,d,e,f,g=[],i=[],j=[],k=[];for(b=0;7>b;b++)c=h([2e3,1]).day(b),d=this.weekdaysMin(c,""),e=this.weekdaysShort(c,""),f=this.weekdays(c,""),g.push(d),i.pus
 h(e),j.push(f),k.push(d),k.push(e),k.push(f);for(g.sort(a),i.sort(a),j.sort(a),k.sort(a),b=0;7>b;b++)i[b]=Z(i[b]),j[b]=Z(j[b]),k[b]=Z(k[b]);this._weekdaysRegex=new RegExp("^("+k.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+j.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+g.join("|")+")","i")}function nc(a){var b=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")}function oc(){return this.hours()%12||12}function pc(){return this.hours()||24}function qc(a,b){R(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}function rc(a,b){return b._meridiemParse}function sc(a){return"p"===(a+"").toLowerCase().charAt(0)}function tc(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"}function uc(a,b){b[Sd]=r(1e3*("0."+a))}funct
 ion vc(){return this._isUTC?"UTC":""}function wc(){return this._isUTC?"Coordinated Universal Time":""}function xc(a){return Ka(1e3*a)}function yc(){return Ka.apply(null,arguments).parseZone()}function zc(a,b,c){var d=this._calendar[a];return w(d)?d.call(b,c):d}function Ac(a){var b=this._longDateFormat[a],c=this._longDateFormat[a.toUpperCase()];return b||!c?b:(this._longDateFormat[a]=c.replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a])}function Bc(){return this._invalidDate}function Cc(a){return this._ordinal.replace("%d",a)}function Dc(a){return a}function Ec(a,b,c,d){var e=this._relativeTime[c];return w(e)?e(a,b,c,d):e.replace(/%d/i,a)}function Fc(a,b){var c=this._relativeTime[a>0?"future":"past"];return w(c)?c(b):c.replace(/%s/i,b)}function Gc(a,b,c,d){var e=H(),f=h().set(d,b);return e[c](f,a)}function Hc(a,b,c){if("number"==typeof a&&(b=a,a=void 0),a=a||"",null!=b)return Gc(a,b,c,"month");var d,e=[];for(d=0;12>d;d++)e[d]=Gc(a,d,c,"month");return e
 }function Ic(a,b,c,d){"boolean"==typeof a?("number"==typeof b&&(c=b,b=void 0),b=b||""):(b=a,c=b,a=!1,"number"==typeof b&&(c=b,b=void 0),b=b||"");var e=H(),f=a?e._week.dow:0;if(null!=c)return Gc(b,(c+f)%7,d,"day");var g,h=[];for(g=0;7>g;g++)h[g]=Gc(b,(g+f)%7,d,"day");return h}function Jc(a,b){return Hc(a,b,"months")}function Kc(a,b){return Hc(a,b,"monthsShort")}function Lc(a,b,c){return Ic(a,b,c,"weekdays")}function Mc(a,b,c){return Ic(a,b,c,"weekdaysShort")}function Nc(a,b,c){return Ic(a,b,c,"weekdaysMin")}function Oc(){var a=this._data;return this._milliseconds=Le(this._milliseconds),this._days=Le(this._days),this._months=Le(this._months),a.milliseconds=Le(a.milliseconds),a.seconds=Le(a.seconds),a.minutes=Le(a.minutes),a.hours=Le(a.hours),a.months=Le(a.months),a.years=Le(a.years),this}function Pc(a,b,c,d){var e=db(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()}function Qc(a,b){return Pc(this,a,b,1)}function Rc(a,b){return Pc(thi
 s,a,b,-1)}function Sc(a){return 0>a?Math.floor(a):Math.ceil(a)}function Tc(){var a,b,c,d,e,f=this._milliseconds,g=this._days,h=this._months,i=this._data;return f>=0&&g>=0&&h>=0||0>=f&&0>=g&&0>=h||(f+=864e5*Sc(Vc(h)+g),g=0,h=0),i.milliseconds=f%1e3,a=q(f/1e3),i.seconds=a%60,b=q(a/60),i.minutes=b%60,c=q(b/60),i.hours=c%24,g+=q(c/24),e=q(Uc(g)),h+=e,g-=Sc(Vc(e)),d=q(h/12),h%=12,i.days=g,i.months=h,i.years=d,this}function Uc(a){return 4800*a/146097}function Vc(a){return 146097*a/4800}function Wc(a){var b,c,d=this._milliseconds;if(a=K(a),"month"===a||"year"===a)return b=this._days+d/864e5,c=this._months+Uc(b),"month"===a?c:c/12;switch(b=this._days+Math.round(Vc(this._months)),a){case"week":return b/7+d/6048e5;case"day":return b+d/864e5;case"hour":return 24*b+d/36e5;case"minute":return 1440*b+d/6e4;case"second":return 86400*b+d/1e3;case"millisecond":return Math.floor(864e5*b)+d;default:throw new Error("Unknown unit "+a)}}function Xc(){return this._milliseconds+864e5*this._days+this._month
 s%12*2592e6+31536e6*r(this._months/12)}function Yc(a){return function(){return this.as(a)}}function Zc(a){
-return a=K(a),this[a+"s"]()}function $c(a){return function(){return this._data[a]}}function _c(){return q(this.days()/7)}function ad(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function bd(a,b,c){var d=db(a).abs(),e=_e(d.as("s")),f=_e(d.as("m")),g=_e(d.as("h")),h=_e(d.as("d")),i=_e(d.as("M")),j=_e(d.as("y")),k=e<af.s&&["s",e]||1>=f&&["m"]||f<af.m&&["mm",f]||1>=g&&["h"]||g<af.h&&["hh",g]||1>=h&&["d"]||h<af.d&&["dd",h]||1>=i&&["M"]||i<af.M&&["MM",i]||1>=j&&["y"]||["yy",j];return k[2]=b,k[3]=+a>0,k[4]=c,ad.apply(null,k)}function cd(a,b){return void 0===af[a]?!1:void 0===b?af[a]:(af[a]=b,!0)}function dd(a){var b=this.localeData(),c=bd(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function ed(){var a,b,c,d=bf(this._milliseconds)/1e3,e=bf(this._days),f=bf(this._months);a=q(d/60),b=q(a/60),d%=60,a%=60,c=q(f/12),f%=12;var g=c,h=f,i=e,j=b,k=a,l=d,m=this.asSeconds();return m?(0>m?"-":"")+"P"+(g?g+"Y":"")+(h?h+"M":"")+(i?i+"D":"")+(j||k||l?"T":"")+(j?j+"H":"")+(k?k+"M":"")+
 (l?l+"S":""):"P0D"}var fd,gd;gd=Array.prototype.some?Array.prototype.some:function(a){for(var b=Object(this),c=b.length>>>0,d=0;c>d;d++)if(d in b&&a.call(this,b[d],d,b))return!0;return!1};var hd=a.momentProperties=[],id=!1,jd={};a.suppressDeprecationWarnings=!1,a.deprecationHandler=null;var kd;kd=Object.keys?Object.keys:function(a){var b,c=[];for(b in a)f(a,b)&&c.push(b);return c};var ld,md,nd={},od={},pd=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,qd=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,rd={},sd={},td=/\d/,ud=/\d\d/,vd=/\d{3}/,wd=/\d{4}/,xd=/[+-]?\d{6}/,yd=/\d\d?/,zd=/\d\d\d\d?/,Ad=/\d\d\d\d\d\d?/,Bd=/\d{1,3}/,Cd=/\d{1,4}/,Dd=/[+-]?\d{1,6}/,Ed=/\d+/,Fd=/[+-]?\d+/,Gd=/Z|[+-]\d\d:?\d\d/gi,Hd=/Z|[+-]\d\d(?::?\d\d)?/gi,Id=/[+-]?\d+(\.\d{1,3})?/,Jd=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u06
 00-\u06FF]+){1,2}/i,Kd={},Ld={},Md=0,Nd=1,Od=2,Pd=3,Qd=4,Rd=5,Sd=6,Td=7,Ud=8;md=Array.prototype.indexOf?Array.prototype.indexOf:function(a){var b;for(b=0;b<this.length;++b)if(this[b]===a)return b;return-1},R("M",["MM",2],"Mo",function(){return this.month()+1}),R("MMM",0,0,function(a){return this.localeData().monthsShort(this,a)}),R("MMMM",0,0,function(a){return this.localeData().months(this,a)}),J("month","M"),W("M",yd),W("MM",yd,ud),W("MMM",function(a,b){return b.monthsShortRegex(a)}),W("MMMM",function(a,b){return b.monthsRegex(a)}),$(["M","MM"],function(a,b){b[Nd]=r(a)-1}),$(["MMM","MMMM"],function(a,b,c,d){var e=c._locale.monthsParse(a,d,c._strict);null!=e?b[Nd]=e:j(c).invalidMonth=a});var Vd=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/,Wd="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Xd="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Yd=Jd,Zd=Jd,$d=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d
 \d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,_d=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,ae=/Z|[+-]\d\d(?::?\d\d)?/,be=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],ce=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],de=/^\/?Date\((\-?\d+)/i;a.createFromInputFallback=u("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. 
 Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}),R("Y",0,0,function(){var a=this.year();return 9999>=a?""+a:"+"+a}),R(0,["YY",2],0,function(){return this.year()%100}),R(0,["YYYY",4],0,"year"),R(0,["YYYYY",5],0,"year"),R(0,["YYYYYY",6,!0],0,"year"),J("year","y"),W("Y",Fd),W("YY",yd,ud),W("YYYY",Cd,wd),W("YYYYY",Dd,xd),W("YYYYYY",Dd,xd),$(["YYYYY","YYYYYY"],Md),$("YYYY",function(b,c){c[Md]=2===b.length?a.parseTwoDigitYear(b):r(b)}),$("YY",function(b,c){c[Md]=a.parseTwoDigitYear(b)}),$("Y",function(a,b){b[Md]=parseInt(a,10)}),a.parseTwoDigitYear=function(a){return r(a)+(r(a)>68?1900:2e3)};var ee=M("FullYear",!0);a.ISO_8601=function(){};var fe=u("moment().min is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var a=Ka.apply(null,arguments);return this.isValid()&&a.isValid()?this>a?this:a:l()}),ge=u("moment().max is deprecated, use moment.min instead. https://g
 ithub.com/moment/moment/issues/1548",function(){var a=Ka.apply(null,arguments);return this.isValid()&&a.isValid()?a>this?this:a:l()}),he=function(){return Date.now?Date.now():+new Date};Qa("Z",":"),Qa("ZZ",""),W("Z",Hd),W("ZZ",Hd),$(["Z","ZZ"],function(a,b,c){c._useUTC=!0,c._tzm=Ra(Hd,a)});var ie=/([\+\-]|\d\d)/gi;a.updateOffset=function(){};var je=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?\d*)?$/,ke=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;db.fn=Oa.prototype;var le=ib(1,"add"),me=ib(-1,"subtract");a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",a.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var ne=u("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(a){return void 0===a?this.localeData():this.locale(a)});R(0,["gg",2],0,function(){return this.weekYear()%100}),R(0,["GG",2],0,functio
 n(){return this.isoWeekYear()%100}),Pb("gggg","weekYear"),Pb("ggggg","weekYear"),Pb("GGGG","isoWeekYear"),Pb("GGGGG","isoWeekYear"),J("weekYear","gg"),J("isoWeekYear","GG"),W("G",Fd),W("g",Fd),W("GG",yd,ud),W("gg",yd,ud),W("GGGG",Cd,wd),W("gggg",Cd,wd),W("GGGGG",Dd,xd),W("ggggg",Dd,xd),_(["gggg","ggggg","GGGG","GGGGG"],function(a,b,c,d){b[d.substr(0,2)]=r(a)}),_(["gg","GG"],function(b,c,d,e){c[e]=a.parseTwoDigitYear(b)}),R("Q",0,"Qo","quarter"),J("quarter","Q"),W("Q",td),$("Q",function(a,b){b[Nd]=3*(r(a)-1)}),R("w",["ww",2],"wo","week"),R("W",["WW",2],"Wo","isoWeek"),J("week","w"),J("isoWeek","W"),W("w",yd),W("ww",yd,ud),W("W",yd),W("WW",yd,ud),_(["w","ww","W","WW"],function(a,b,c,d){b[d.substr(0,1)]=r(a)});var oe={dow:0,doy:6};R("D",["DD",2],"Do","date"),J("date","D"),W("D",yd),W("DD",yd,ud),W("Do",function(a,b){return a?b._ordinalParse:b._ordinalParseLenient}),$(["D","DD"],Od),$("Do",function(a,b){b[Od]=r(a.match(yd)[0],10)});var pe=M("Date",!0);R("d",0,"do","day"),R("dd",0,0,func
 tion(a){return this.localeData().weekdaysMin(this,a)}),R("ddd",0,0,function(a){return this.localeData().weekdaysShort(this,a)}),R("dddd",0,0,function(a){return this.localeData().weekdays(this,a)}),R("e",0,0,"weekday"),R("E",0,0,"isoWeekday"),J("day","d"),J("weekday","e"),J("isoWeekday","E"),W("d",yd),W("e",yd),W("E",yd),W("dd",function(a,b){return b.weekdaysMinRegex(a)}),W("ddd",function(a,b){return b.weekdaysShortRegex(a)}),W("dddd",function(a,b){return b.weekdaysRegex(a)}),_(["dd","ddd","dddd"],function(a,b,c,d){var e=c._locale.weekdaysParse(a,d,c._strict);null!=e?b.d=e:j(c).invalidWeekday=a}),_(["d","e","E"],function(a,b,c,d){b[d]=r(a)});var qe="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),re="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),se="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),te=Jd,ue=Jd,ve=Jd;R("DDD",["DDDD",3],"DDDo","dayOfYear"),J("dayOfYear","DDD"),W("DDD",Bd),W("DDDD",vd),$(["DDD","DDDD"],function(a,b,c){c._dayOfYear=r(a)}),R("H",["HH",2],0,"hour"),R("h",["h
 h",2],0,oc),R("k",["kk",2],0,pc),R("hmm",0,0,function(){return""+oc.apply(this)+Q(this.minutes(),2)}),R("hmmss",0,0,function(){return""+oc.apply(this)+Q(this.minutes(),2)+Q(this.seconds(),2)}),R("Hmm",0,0,function(){return""+this.hours()+Q(this.minutes(),2)}),R("Hmmss",0,0,function(){return""+this.hours()+Q(this.minutes(),2)+Q(this.seconds(),2)}),qc("a",!0),qc("A",!1),J("hour","h"),W("a",rc),W("A",rc),W("H",yd),W("h",yd),W("HH",yd,ud),W("hh",yd,ud),W("hmm",zd),W("hmmss",Ad),W("Hmm",zd),W("Hmmss",Ad),$(["H","HH"],Pd),$(["a","A"],function(a,b,c){c._isPm=c._locale.isPM(a),c._meridiem=a}),$(["h","hh"],function(a,b,c){b[Pd]=r(a),j(c).bigHour=!0}),$("hmm",function(a,b,c){var d=a.length-2;b[Pd]=r(a.substr(0,d)),b[Qd]=r(a.substr(d)),j(c).bigHour=!0}),$("hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[Pd]=r(a.substr(0,d)),b[Qd]=r(a.substr(d,2)),b[Rd]=r(a.substr(e)),j(c).bigHour=!0}),$("Hmm",function(a,b,c){var d=a.length-2;b[Pd]=r(a.substr(0,d)),b[Qd]=r(a.substr(d))}),$("Hmmss",functi
 on(a,b,c){var d=a.length-4,e=a.length-2;b[Pd]=r(a.substr(0,d)),b[Qd]=r(a.substr(d,2)),b[Rd]=r(a.substr(e))});var we=/[ap]\.?m?\.?/i,xe=M("Hours",!0);R("m",["mm",2],0,"minute"),J("minute","m"),W("m",yd),W("mm",yd,ud),$(["m","mm"],Qd);var ye=M("Minutes",!1);R("s",["ss",2],0,"second"),J("second","s"),W("s",yd),W("ss",yd,ud),$(["s","ss"],Rd);var ze=M("Seconds",!1);R("S",0,0,function(){return~~(this.millisecond()/100)}),R(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),R(0,["SSS",3],0,"millisecond"),R(0,["SSSS",4],0,function(){return 10*this.millisecond()}),R(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),R(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),R(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),R(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),R(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),J("millisecond","ms"),W("S",Bd,td),W("SS",Bd,ud),W("SSS",Bd,vd);var Ae;for(Ae="SSSS";Ae.length<=9;Ae+="S")W(Ae,Ed
 );for(Ae="S";Ae.length<=9;Ae+="S")$(Ae,uc);var Be=M("Milliseconds",!1);R("z",0,0,"zoneAbbr"),R("zz",0,0,"zoneName");var Ce=o.prototype;Ce.add=le,Ce.calendar=kb,Ce.clone=lb,Ce.diff=sb,Ce.endOf=Eb,Ce.format=wb,Ce.from=xb,Ce.fromNow=yb,Ce.to=zb,Ce.toNow=Ab,Ce.get=P,Ce.invalidAt=Nb,Ce.isAfter=mb,Ce.isBefore=nb,Ce.isBetween=ob,Ce.isSame=pb,Ce.isSameOrAfter=qb,Ce.isSameOrBefore=rb,Ce.isValid=Lb,Ce.lang=ne,Ce.locale=Bb,Ce.localeData=Cb,Ce.max=ge,Ce.min=fe,Ce.parsingFlags=Mb,Ce.set=P,Ce.startOf=Db,Ce.subtract=me,Ce.toArray=Ib,Ce.toObject=Jb,Ce.toDate=Hb,Ce.toISOString=vb,Ce.toJSON=Kb,Ce.toString=ub,Ce.unix=Gb,Ce.valueOf=Fb,Ce.creationData=Ob,Ce.year=ee,Ce.isLeapYear=ta,Ce.weekYear=Qb,Ce.isoWeekYear=Rb,Ce.quarter=Ce.quarters=Wb,Ce.month=ha,Ce.daysInMonth=ia,Ce.week=Ce.weeks=$b,Ce.isoWeek=Ce.isoWeeks=_b,Ce.weeksInYear=Tb,Ce.isoWeeksInYear=Sb,Ce.date=pe,Ce.day=Ce.days=gc,Ce.weekday=hc,Ce.isoWeekday=ic,Ce.dayOfYear=nc,Ce.hour=Ce.hours=xe,Ce.minute=Ce.minutes=ye,Ce.second=Ce.seconds=ze,Ce.millis
 econd=Ce.milliseconds=Be,Ce.utcOffset=Ua,Ce.utc=Wa,Ce.local=Xa,Ce.parseZone=Ya,Ce.hasAlignedHourOffset=Za,Ce.isDST=$a,Ce.isDSTShifted=_a,Ce.isLocal=ab,Ce.isUtcOffset=bb,Ce.isUtc=cb,Ce.isUTC=cb,Ce.zoneAbbr=vc,Ce.zoneName=wc,Ce.dates=u("dates accessor is deprecated. Use date instead.",pe),Ce.months=u("months accessor is deprecated. Use month instead",ha),Ce.years=u("years accessor is deprecated. Use year instead",ee),Ce.zone=u("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Va);var De=Ce,Ee={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Fe={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},Ge="Invalid date",He="%d",Ie=/\d{1,2}/,Je={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M
 :"a month",MM:"%d months",y:"a year",yy:"%d years"},Ke=A.prototype;Ke._calendar=Ee,Ke.calendar=zc,Ke._longDateFormat=Fe,Ke.longDateFormat=Ac,Ke._invalidDate=Ge,Ke.invalidDate=Bc,Ke._ordinal=He,Ke.ordinal=Cc,Ke._ordinalParse=Ie,Ke.preparse=Dc,Ke.postformat=Dc,Ke._relativeTime=Je,Ke.relativeTime=Ec,Ke.pastFuture=Fc,Ke.set=y,Ke.months=ca,Ke._months=Wd,Ke.monthsShort=da,Ke._monthsShort=Xd,Ke.monthsParse=fa,Ke._monthsRegex=Zd,Ke.monthsRegex=ka,Ke._monthsShortRegex=Yd,Ke.monthsShortRegex=ja,Ke.week=Xb,Ke._week=oe,Ke.firstDayOfYear=Zb,Ke.firstDayOfWeek=Yb,Ke.weekdays=bc,Ke._weekdays=qe,Ke.weekdaysMin=dc,Ke._weekdaysMin=se,Ke.weekdaysShort=cc,Ke._weekdaysShort=re,Ke.weekdaysParse=fc,Ke._weekdaysRegex=te,Ke.weekdaysRegex=jc,Ke._weekdaysShortRegex=ue,Ke.weekdaysShortRegex=kc,Ke._weekdaysMinRegex=ve,Ke.weekdaysMinRegex=lc,Ke.isPM=sc,Ke._meridiemParse=we,Ke.meridiem=tc,E("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===r(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"
 rd":"th";return a+c}}),a.lang=u("moment.lang is deprecated. Use moment.locale instead.",E),a.langData=u("moment.langData is deprecated. Use moment.localeData instead.",H);var Le=Math.abs,Me=Yc("ms"),Ne=Yc("s"),Oe=Yc("m"),Pe=Yc("h"),Qe=Yc("d"),Re=Yc("w"),Se=Yc("M"),Te=Yc("y"),Ue=$c("milliseconds"),Ve=$c("seconds"),We=$c("minutes"),Xe=$c("hours"),Ye=$c("days"),Ze=$c("months"),$e=$c("years"),_e=Math.round,af={s:45,m:45,h:22,d:26,M:11},bf=Math.abs,cf=Oa.prototype;cf.abs=Oc,cf.add=Qc,cf.subtract=Rc,cf.as=Wc,cf.asMilliseconds=Me,cf.asSeconds=Ne,cf.asMinutes=Oe,cf.asHours=Pe,cf.asDays=Qe,cf.asWeeks=Re,cf.asMonths=Se,cf.asYears=Te,cf.valueOf=Xc,cf._bubble=Tc,cf.get=Zc,cf.milliseconds=Ue,cf.seconds=Ve,cf.minutes=We,cf.hours=Xe,cf.days=Ye,cf.weeks=_c,cf.months=Ze,cf.years=$e,cf.humanize=dd,cf.toISOString=ed,cf.toString=ed,cf.toJSON=ed,cf.locale=Bb,cf.localeData=Cb,cf.toIsoString=u("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",ed),cf.lang=ne,R("X",0,0,"u
 nix"),R("x",0,0,"valueOf"),W("x",Fd),W("X",Id),$("X",function(a,b,c){c._d=new Date(1e3*parseFloat(a,10))}),$("x",function(a,b,c){c._d=new Date(r(a))}),a.version="2.13.0",b(Ka),a.fn=De,a.min=Ma,a.max=Na,a.now=he,a.utc=h,a.unix=xc,a.months=Jc,a.isDate=d,a.locale=E,a.invalid=l,a.duration=db,a.isMoment=p,a.weekdays=Lc,a.parseZone=yc,a.localeData=H,a.isDuration=Pa,a.monthsShort=Kc,a.weekdaysMin=Nc,a.defineLocale=F,a.updateLocale=G,a.locales=I,a.weekdaysShort=Mc,a.normalizeUnits=K,a.relativeTimeThreshold=cd,a.prototype=De;var df=a;return df});
\ No newline at end of file


[14/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/rickshaw.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/rickshaw.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/rickshaw.js
deleted file mode 100644
index 6beb828..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/rickshaw.js
+++ /dev/null
@@ -1,2659 +0,0 @@
-var Rickshaw = {
-
-	namespace: function(namespace, obj) {
-
-		var parts = namespace.split('.');
-
-		var parent = Rickshaw;
-
-		for(var i = 1, length = parts.length; i < length; i++) {
-			currentPart = parts[i];
-			parent[currentPart] = parent[currentPart] || {};
-			parent = parent[currentPart];
-		}
-		return parent;
-	},
-
-	keys: function(obj) {
-		var keys = [];
-		for (var key in obj) keys.push(key);
-		return keys;
-	},
-
-	extend: function(destination, source) {
-
-		for (var property in source) {
-			destination[property] = source[property];
-		}
-		return destination;
-	}
-};
-
-if (typeof module !== 'undefined' && module.exports) {
-	var d3 = require('d3');
-	module.exports = Rickshaw;
-}
-
-/* Adapted from https://github.com/Jakobo/PTClass */
-
-/*
-Copyright (c) 2005-2010 Sam Stephenson
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-/* Based on Alex Arnell's inheritance implementation. */
-/** section: Language
- * class Class
- *
- *  Manages Prototype's class-based OOP system.
- *
- *  Refer to Prototype's web site for a [tutorial on classes and
- *  inheritance](http://prototypejs.org/learn/class-inheritance).
-**/
-(function(globalContext) {
-/* ------------------------------------ */
-/* Import from object.js                */
-/* ------------------------------------ */
-var _toString = Object.prototype.toString,
-    NULL_TYPE = 'Null',
-    UNDEFINED_TYPE = 'Undefined',
-    BOOLEAN_TYPE = 'Boolean',
-    NUMBER_TYPE = 'Number',
-    STRING_TYPE = 'String',
-    OBJECT_TYPE = 'Object',
-    FUNCTION_CLASS = '[object Function]';
-function isFunction(object) {
-  return _toString.call(object) === FUNCTION_CLASS;
-}
-function extend(destination, source) {
-  for (var property in source) if (source.hasOwnProperty(property)) // modify protect primitive slaughter
-    destination[property] = source[property];
-  return destination;
-}
-function keys(object) {
-  if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); }
-  var results = [];
-  for (var property in object) {
-    if (object.hasOwnProperty(property)) {
-      results.push(property);
-    }
-  }
-  return results;
-}
-function Type(o) {
-  switch(o) {
-    case null: return NULL_TYPE;
-    case (void 0): return UNDEFINED_TYPE;
-  }
-  var type = typeof o;
-  switch(type) {
-    case 'boolean': return BOOLEAN_TYPE;
-    case 'number':  return NUMBER_TYPE;
-    case 'string':  return STRING_TYPE;
-  }
-  return OBJECT_TYPE;
-}
-function isUndefined(object) {
-  return typeof object === "undefined";
-}
-/* ------------------------------------ */
-/* Import from Function.js              */
-/* ------------------------------------ */
-var slice = Array.prototype.slice;
-function argumentNames(fn) {
-  var names = fn.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1]
-    .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '')
-    .replace(/\s+/g, '').split(',');
-  return names.length == 1 && !names[0] ? [] : names;
-}
-function wrap(fn, wrapper) {
-  var __method = fn;
-  return function() {
-    var a = update([bind(__method, this)], arguments);
-    return wrapper.apply(this, a);
-  }
-}
-function update(array, args) {
-  var arrayLength = array.length, length = args.length;
-  while (length--) array[arrayLength + length] = args[length];
-  return array;
-}
-function merge(array, args) {
-  array = slice.call(array, 0);
-  return update(array, args);
-}
-function bind(fn, context) {
-  if (arguments.length < 2 && isUndefined(arguments[0])) return this;
-  var __method = fn, args = slice.call(arguments, 2);
-  return function() {
-    var a = merge(args, arguments);
-    return __method.apply(context, a);
-  }
-}
-
-/* ------------------------------------ */
-/* Import from Prototype.js             */
-/* ------------------------------------ */
-var emptyFunction = function(){};
-
-var Class = (function() {
-  
-  // Some versions of JScript fail to enumerate over properties, names of which 
-  // correspond to non-enumerable properties in the prototype chain
-  var IS_DONTENUM_BUGGY = (function(){
-    for (var p in { toString: 1 }) {
-      // check actual property name, so that it works with augmented Object.prototype
-      if (p === 'toString') return false;
-    }
-    return true;
-  })();
-  
-  function subclass() {};
-  function create() {
-    var parent = null, properties = [].slice.apply(arguments);
-    if (isFunction(properties[0]))
-      parent = properties.shift();
-
-    function klass() {
-      this.initialize.apply(this, arguments);
-    }
-
-    extend(klass, Class.Methods);
-    klass.superclass = parent;
-    klass.subclasses = [];
-
-    if (parent) {
-      subclass.prototype = parent.prototype;
-      klass.prototype = new subclass;
-      try { parent.subclasses.push(klass) } catch(e) {}
-    }
-
-    for (var i = 0, length = properties.length; i < length; i++)
-      klass.addMethods(properties[i]);
-
-    if (!klass.prototype.initialize)
-      klass.prototype.initialize = emptyFunction;
-
-    klass.prototype.constructor = klass;
-    return klass;
-  }
-
-  function addMethods(source) {
-    var ancestor   = this.superclass && this.superclass.prototype,
-        properties = keys(source);
-
-    // IE6 doesn't enumerate `toString` and `valueOf` (among other built-in `Object.prototype`) properties,
-    // Force copy if they're not Object.prototype ones.
-    // Do not copy other Object.prototype.* for performance reasons
-    if (IS_DONTENUM_BUGGY) {
-      if (source.toString != Object.prototype.toString)
-        properties.push("toString");
-      if (source.valueOf != Object.prototype.valueOf)
-        properties.push("valueOf");
-    }
-
-    for (var i = 0, length = properties.length; i < length; i++) {
-      var property = properties[i], value = source[property];
-      if (ancestor && isFunction(value) &&
-          argumentNames(value)[0] == "$super") {
-        var method = value;
-        value = wrap((function(m) {
-          return function() { return ancestor[m].apply(this, arguments); };
-        })(property), method);
-
-        value.valueOf = bind(method.valueOf, method);
-        value.toString = bind(method.toString, method);
-      }
-      this.prototype[property] = value;
-    }
-
-    return this;
-  }
-
-  return {
-    create: create,
-    Methods: {
-      addMethods: addMethods
-    }
-  };
-})();
-
-if (globalContext.exports) {
-  globalContext.exports.Class = Class;
-}
-else {
-  globalContext.Class = Class;
-}
-})(Rickshaw);
-Rickshaw.namespace('Rickshaw.Compat.ClassList');
-
-Rickshaw.Compat.ClassList = function() {
-
-	/* adapted from http://purl.eligrey.com/github/classList.js/blob/master/classList.js */
-
-	if (typeof document !== "undefined" && !("classList" in document.createElement("a"))) {
-
-	(function (view) {
-
-	"use strict";
-
-	var
-		  classListProp = "classList"
-		, protoProp = "prototype"
-		, elemCtrProto = (view.HTMLElement || view.Element)[protoProp]
-		, objCtr = Object
-		, strTrim = String[protoProp].trim || function () {
-			return this.replace(/^\s+|\s+$/g, "");
-		}
-		, arrIndexOf = Array[protoProp].indexOf || function (item) {
-			var
-				  i = 0
-				, len = this.length
-			;
-			for (; i < len; i++) {
-				if (i in this && this[i] === item) {
-					return i;
-				}
-			}
-			return -1;
-		}
-		// Vendors: please allow content code to instantiate DOMExceptions
-		, DOMEx = function (type, message) {
-			this.name = type;
-			this.code = DOMException[type];
-			this.message = message;
-		}
-		, checkTokenAndGetIndex = function (classList, token) {
-			if (token === "") {
-				throw new DOMEx(
-					  "SYNTAX_ERR"
-					, "An invalid or illegal string was specified"
-				);
-			}
-			if (/\s/.test(token)) {
-				throw new DOMEx(
-					  "INVALID_CHARACTER_ERR"
-					, "String contains an invalid character"
-				);
-			}
-			return arrIndexOf.call(classList, token);
-		}
-		, ClassList = function (elem) {
-			var
-				  trimmedClasses = strTrim.call(elem.className)
-				, classes = trimmedClasses ? trimmedClasses.split(/\s+/) : []
-				, i = 0
-				, len = classes.length
-			;
-			for (; i < len; i++) {
-				this.push(classes[i]);
-			}
-			this._updateClassName = function () {
-				elem.className = this.toString();
-			};
-		}
-		, classListProto = ClassList[protoProp] = []
-		, classListGetter = function () {
-			return new ClassList(this);
-		}
-	;
-	// Most DOMException implementations don't allow calling DOMException's toString()
-	// on non-DOMExceptions. Error's toString() is sufficient here.
-	DOMEx[protoProp] = Error[protoProp];
-	classListProto.item = function (i) {
-		return this[i] || null;
-	};
-	classListProto.contains = function (token) {
-		token += "";
-		return checkTokenAndGetIndex(this, token) !== -1;
-	};
-	classListProto.add = function (token) {
-		token += "";
-		if (checkTokenAndGetIndex(this, token) === -1) {
-			this.push(token);
-			this._updateClassName();
-		}
-	};
-	classListProto.remove = function (token) {
-		token += "";
-		var index = checkTokenAndGetIndex(this, token);
-		if (index !== -1) {
-			this.splice(index, 1);
-			this._updateClassName();
-		}
-	};
-	classListProto.toggle = function (token) {
-		token += "";
-		if (checkTokenAndGetIndex(this, token) === -1) {
-			this.add(token);
-		} else {
-			this.remove(token);
-		}
-	};
-	classListProto.toString = function () {
-		return this.join(" ");
-	};
-
-	if (objCtr.defineProperty) {
-		var classListPropDesc = {
-			  get: classListGetter
-			, enumerable: true
-			, configurable: true
-		};
-		try {
-			objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
-		} catch (ex) { // IE 8 doesn't support enumerable:true
-			if (ex.number === -0x7FF5EC54) {
-				classListPropDesc.enumerable = false;
-				objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
-			}
-		}
-	} else if (objCtr[protoProp].__defineGetter__) {
-		elemCtrProto.__defineGetter__(classListProp, classListGetter);
-	}
-
-	}(window));
-
-	}
-};
-
-if ( (typeof RICKSHAW_NO_COMPAT !== "undefined" && !RICKSHAW_NO_COMPAT) || typeof RICKSHAW_NO_COMPAT === "undefined") {
-	new Rickshaw.Compat.ClassList();
-}
-Rickshaw.namespace('Rickshaw.Graph');
-
-Rickshaw.Graph = function(args) {
-
-	this.element = args.element;
-	this.series = args.series;
-
-	this.defaults = {
-		interpolation: 'cardinal',
-		offset: 'zero',
-		min: undefined,
-		max: undefined
-	};
-
-	Rickshaw.keys(this.defaults).forEach( function(k) {
-		this[k] = args[k] || this.defaults[k];
-	}, this );
-
-	this.window = {};
-
-	this.updateCallbacks = [];
-
-	var self = this;
-
-	this.initialize = function(args) {
-
-		this.validateSeries(args.series);
-
-		this.series.active = function() { return self.series.filter( function(s) { return !s.disabled } ) };
-
-		this.setSize({ width: args.width, height: args.height });
-
-		this.element.classList.add('rickshaw_graph');
-		this.vis = d3.select(this.element)
-			.append("svg:svg")
-			.attr('width', this.width)
-			.attr('height', this.height);
-
-		var renderers = [
-			Rickshaw.Graph.Renderer.Stack,
-			Rickshaw.Graph.Renderer.Line,
-			Rickshaw.Graph.Renderer.Bar,
-			Rickshaw.Graph.Renderer.Area,
-			Rickshaw.Graph.Renderer.ScatterPlot
-		];
-
-		renderers.forEach( function(r) {
-			if (!r) return;
-			self.registerRenderer(new r( { graph: self } ));
-		} );
-
-		this.setRenderer(args.renderer || 'stack', args);
-		this.discoverRange();
-	};
-
-	this.validateSeries = function(series) {
-
-		if (!(series instanceof Array) && !(series instanceof Rickshaw.Series)) {
-			var seriesSignature = Object.prototype.toString.apply(series);
-			throw "series is not an array: " + seriesSignature;
-		}
-
-		var pointsCount;
-
-		series.forEach( function(s) {
-
-			if (!(s instanceof Object)) {
-				throw "series element is not an object: " + s;
-			}
-			if (!(s.data)) {
-				throw "series has no data: " + JSON.stringify(s);
-			}
-			if (!(s.data instanceof Array)) {
-				throw "series data is not an array: " + JSON.stringify(s.data);
-			}
-
-			pointsCount = pointsCount || s.data.length;
-
-			if (pointsCount && s.data.length != pointsCount) {
-				throw "series cannot have differing numbers of points: " +
-					pointsCount	+ " vs " + s.data.length + "; see Rickshaw.Series.zeroFill()";
-			}
-
-			var dataTypeX = typeof s.data[0].x;
-			var dataTypeY = typeof s.data[0].y;
-
-			if (dataTypeX != 'number' || dataTypeY != 'number') {
-				throw "x and y properties of points should be numbers instead of " +
-					dataTypeX + " and " + dataTypeY;
-			}
-		} );
-	};
-
-	this.dataDomain = function() {
-
-		// take from the first series
-		var data = this.series[0].data;
-
-		return [ data[0].x, data.slice(-1).shift().x ];
-
-	};
-
-	this.discoverRange = function() {
-
-		var domain = this.renderer.domain();
-
-		this.x = d3.scale.linear().domain(domain.x).range([0, this.width]);
-
-		this.y = d3.scale.linear().domain(domain.y).range([this.height, 0]);
-
-		this.y.magnitude = d3.scale.linear()
-			.domain([domain.y[0] - domain.y[0], domain.y[1] - domain.y[0]])
-			.range([0, this.height]);
-	};
-
-	this.render = function() {
-
-		var stackedData = this.stackData();
-		this.discoverRange();
-
-		this.renderer.render();
-
-		this.updateCallbacks.forEach( function(callback) {
-			callback();
-		} );
-	};
-
-	this.update = this.render;
-
-	this.stackData = function() {
-
-		var data = this.series.active()
-			.map( function(d) { return d.data } )
-			.map( function(d) { return d.filter( function(d) { return this._slice(d) }, this ) }, this);
-
-		this.stackData.hooks.data.forEach( function(entry) {
-			data = entry.f.apply(self, [data]);
-		} );
-
-		var layout = d3.layout.stack();
-		layout.offset( self.offset );
-
-		var stackedData = layout(data);
-
-		this.stackData.hooks.after.forEach( function(entry) {
-			stackedData = entry.f.apply(self, [data]);
-		} );
-
-		var i = 0;
-		this.series.forEach( function(series) {
-			if (series.disabled) return;
-			series.stack = stackedData[i++];
-		} );
-
-		this.stackedData = stackedData;
-		return stackedData;
-	};
-
-	this.stackData.hooks = { data: [], after: [] };
-
-	this._slice = function(d) {
-
-		if (this.window.xMin || this.window.xMax) {
-
-			var isInRange = true;
-
-			if (this.window.xMin && d.x < this.window.xMin) isInRange = false;
-			if (this.window.xMax && d.x > this.window.xMax) isInRange = false;
-
-			return isInRange;
-		}
-
-		return true;
-	};
-
-	this.onUpdate = function(callback) {
-		this.updateCallbacks.push(callback);
-	};
-
-	this.registerRenderer = function(renderer) {
-		this._renderers = this._renderers || {};
-		this._renderers[renderer.name] = renderer;
-	};
-
-	this.configure = function(args) {
-
-		if (args.width || args.height) {
-			this.setSize(args);
-		}
-
-		Rickshaw.keys(this.defaults).forEach( function(k) {
-			this[k] = k in args ? args[k]
-				: k in this ? this[k]
-				: this.defaults[k];
-		}, this );
-
-		this.setRenderer(args.renderer || this.renderer.name, args);
-	};
-
-	this.setRenderer = function(name, args) {
-
-		if (!this._renderers[name]) {
-			throw "couldn't find renderer " + name;
-		}
-		this.renderer = this._renderers[name];
-
-		if (typeof args == 'object') {
-			this.renderer.configure(args);
-		}
-	};
-
-	this.setSize = function(args) {
-
-		args = args || {};
-
-		if (typeof window !== undefined) {
-			var style = window.getComputedStyle(this.element, null);
-			var elementWidth = parseInt(style.getPropertyValue('width'));
-			var elementHeight = parseInt(style.getPropertyValue('height'));
-		}
-
-		this.width = args.width || elementWidth || 400;
-		this.height = args.height || elementHeight || 250;
-
-		this.vis && this.vis
-			.attr('width', this.width)
-			.attr('height', this.height);
-	}
-
-	this.initialize(args);
-};
-Rickshaw.namespace('Rickshaw.Fixtures.Color');
-
-Rickshaw.Fixtures.Color = function() {
-
-	this.schemes = {};
-
-	this.schemes.spectrum14 = [
-		'#ecb796',
-		'#dc8f70',
-		'#b2a470',
-		'#92875a',
-		'#716c49',
-		'#d2ed82',
-		'#bbe468',
-		'#a1d05d',
-		'#e7cbe6',
-		'#d8aad6',
-		'#a888c2',
-		'#9dc2d3',
-		'#649eb9',
-		'#387aa3'
-	].reverse();
-
-	this.schemes.spectrum2000 = [
-		'#57306f',
-		'#514c76',
-		'#646583',
-		'#738394',
-		'#6b9c7d',
-		'#84b665',
-		'#a7ca50',
-		'#bfe746',
-		'#e2f528',
-		'#fff726',
-		'#ecdd00',
-		'#d4b11d',
-		'#de8800',
-		'#de4800',
-		'#c91515',
-		'#9a0000',
-		'#7b0429',
-		'#580839',
-		'#31082b'
-	];
-
-	this.schemes.spectrum2001 = [
-		'#2f243f',
-		'#3c2c55',
-		'#4a3768',
-		'#565270',
-		'#6b6b7c',
-		'#72957f',
-		'#86ad6e',
-		'#a1bc5e',
-		'#b8d954',
-		'#d3e04e',
-		'#ccad2a',
-		'#cc8412',
-		'#c1521d',
-		'#ad3821',
-		'#8a1010',
-		'#681717',
-		'#531e1e',
-		'#3d1818',
-		'#320a1b'
-	];
-
-	this.schemes.classic9 = [
-		'#423d4f',
-		'#4a6860',
-		'#848f39',
-		'#a2b73c',
-		'#ddcb53',
-		'#c5a32f',
-		'#7d5836',
-		'#963b20',
-		'#7c2626',
-		'#491d37',
-		'#2f254a'
-	].reverse();
-
-	this.schemes.httpStatus = {
-		503: '#ea5029',
-		502: '#d23f14',
-		500: '#bf3613',
-		410: '#efacea',
-		409: '#e291dc',
-		403: '#f457e8',
-		408: '#e121d2',
-		401: '#b92dae',
-		405: '#f47ceb',
-		404: '#a82a9f',
-		400: '#b263c6',
-		301: '#6fa024',
-		302: '#87c32b',
-		307: '#a0d84c',
-		304: '#28b55c',
-		200: '#1a4f74',
-		206: '#27839f',
-		201: '#52adc9',
-		202: '#7c979f',
-		203: '#a5b8bd',
-		204: '#c1cdd1'
-	};
-
-	this.schemes.colorwheel = [
-		'#b5b6a9',
-		'#858772',
-		'#785f43',
-		'#96557e',
-		'#4682b4',
-		'#65b9ac',
-		'#73c03a',
-		'#cb513a'
-	].reverse();
-
-	this.schemes.cool = [
-		'#5e9d2f',
-		'#73c03a',
-		'#4682b4',
-		'#7bc3b8',
-		'#a9884e',
-		'#c1b266',
-		'#a47493',
-		'#c09fb5'
-	];
-
-	this.schemes.munin = [
-		'#00cc00',
-		'#0066b3',
-		'#ff8000',
-		'#ffcc00',
-		'#330099',
-		'#990099',
-		'#ccff00',
-		'#ff0000',
-		'#808080',
-		'#008f00',
-		'#00487d',
-		'#b35a00',
-		'#b38f00',
-		'#6b006b',
-		'#8fb300',
-		'#b30000',
-		'#bebebe',
-		'#80ff80',
-		'#80c9ff',
-		'#ffc080',
-		'#ffe680',
-		'#aa80ff',
-		'#ee00cc',
-		'#ff8080',
-		'#666600',
-		'#ffbfff',
-		'#00ffcc',
-		'#cc6699',
-		'#999900'
-	];
-};
-Rickshaw.namespace('Rickshaw.Fixtures.RandomData');
-
-Rickshaw.Fixtures.RandomData = function(timeInterval) {
-
-	var addData;
-	timeInterval = timeInterval || 1;
-
-	var lastRandomValue = 200;
-
-	var timeBase = Math.floor(new Date().getTime() / 1000);
-
-	this.addData = function(data) {
-
-		var randomValue = Math.random() * 100 + 15 + lastRandomValue;
-		var index = data[0].length;
-
-		var counter = 1;
-
-		data.forEach( function(series) {
-			var randomVariance = Math.random() * 20;
-			var v = randomValue / 25  + counter++
-				+ (Math.cos((index * counter * 11) / 960) + 2) * 15 
-				+ (Math.cos(index / 7) + 2) * 7
-				+ (Math.cos(index / 17) + 2) * 1;
-
-			series.push( { x: (index * timeInterval) + timeBase, y: v + randomVariance } );
-		} );
-
-		lastRandomValue = randomValue * .85;
-	}
-};
-
-Rickshaw.namespace('Rickshaw.Fixtures.Time');
-
-Rickshaw.Fixtures.Time = function() {
-
-	var tzOffset = new Date().getTimezoneOffset() * 60;
-
-	var self = this;
-
-	this.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
-
-	this.units = [
-		{
-			name: 'decade',
-			seconds: 86400 * 365.25 * 10,
-			formatter: function(d) { return (parseInt(d.getUTCFullYear() / 10) * 10) }
-		}, {
-			name: '5 year',
-			seconds: 86400 * 365.25 * 5,
-			formatter: function(d) { return (parseInt(d.getUTCFullYear() / 5) * 5) }
-		}, {
-			name: 'year',
-			seconds: 86400 * 365.25,
-			formatter: function(d) { return d.getUTCFullYear() }
-		}, {
-			name: '6 month',
-			seconds: 86400 * 30.5 * 6,
-			formatter: function(d) { return self.months[d.getUTCMonth()] }
-		}, {
-			name: 'month',
-			seconds: 86400 * 30.5,
-			formatter: function(d) { return self.months[d.getUTCMonth()] }
-		}, {
-			name: 'week',
-			seconds: 86400 * 7,
-			formatter: function(d) { return self.formatDate(d) }
-		}, {
-			name: '3 day',
-			seconds: 86400 * 3,
-			formatter: function(d) { return self.formatDate(d) }
-		}, {
-			name: 'day',
-			seconds: 86400,
-			formatter: function(d) { return d.getUTCDate() }
-		}, {
-			name: '6 hour',
-			seconds: 3600 * 6,
-			formatter: function(d) { return self.formatTime(d) }
-		}, {
-			name: 'hour',
-			seconds: 3600,
-			formatter: function(d) { return self.formatTime(d) }
-		}, {
-			name: '15 minute',
-			seconds: 60 * 15,
-			formatter: function(d) { return self.formatTime(d) }
-		}, {
-			name: '5 minute',
-			seconds: 60 * 5,
-			formatter: function(d) { return self.formatTime(d) }
-		}, {
-			name: 'minute',
-			seconds: 60,
-			formatter: function(d) { return d.getUTCMinutes() }
-		}, {
-			name: '15 second',
-			seconds: 15,
-			formatter: function(d) { return d.getUTCSeconds() + 's' }
-		}, {
-			name: '5 second',
-			seconds: 5,
-			formatter: function(d) { return d.getUTCSeconds() + 's' }
-		}, {
-			name: 'second',
-			seconds: 1,
-			formatter: function(d) { return d.getUTCSeconds() + 's' }
-		}
-	];
-
-	this.unit = function(unitName) {
-		return this.units.filter( function(unit) { return unitName == unit.name } ).shift();
-	};
-
-	this.formatDate = function(d) {
-		return d.toUTCString().match(/, (\w+ \w+ \w+)/)[1];
-	};
-
-	this.formatTime = function(d) {
-		return d.toUTCString().match(/(\d+:\d+):/)[1];
-	};
-
-	this.ceil = function(time, unit) {
-
-		if (unit.name == 'month') {
-
-			var nearFuture = new Date((time + unit.seconds - 1) * 1000);
-
-			var rounded = new Date(0);
-			rounded.setUTCFullYear(nearFuture.getUTCFullYear());
-			rounded.setUTCMonth(nearFuture.getUTCMonth());
-			rounded.setUTCDate(1);
-			rounded.setUTCHours(0);
-			rounded.setUTCMinutes(0);
-			rounded.setUTCSeconds(0);
-			rounded.setUTCMilliseconds(0);
-
-			return rounded.getTime() / 1000;
-		}
-
-		if (unit.name == 'year') {
-
-			var nearFuture = new Date((time + unit.seconds - 1) * 1000);
-
-			var rounded = new Date(0);
-			rounded.setUTCFullYear(nearFuture.getUTCFullYear());
-			rounded.setUTCMonth(0);
-			rounded.setUTCDate(1);
-			rounded.setUTCHours(0);
-			rounded.setUTCMinutes(0);
-			rounded.setUTCSeconds(0);
-			rounded.setUTCMilliseconds(0);
-
-			return rounded.getTime() / 1000;
-		}
-
-		return Math.ceil(time / unit.seconds) * unit.seconds;
-	};
-};
-Rickshaw.namespace('Rickshaw.Fixtures.Number');
-
-Rickshaw.Fixtures.Number.formatKMBT = function(y) {
-	if (y >= 1000000000000)   { return y / 1000000000000 + "T" } 
-	else if (y >= 1000000000) { return y / 1000000000 + "B" } 
-	else if (y >= 1000000)    { return y / 1000000 + "M" } 
-	else if (y >= 1000)       { return y / 1000 + "K" }
-	else if (y < 1 && y > 0)  { return y.toFixed(2) }
-	else if (y == 0)          { return '' }
-	else                      { return y }
-};
-
-Rickshaw.Fixtures.Number.formatBase1024KMGTP = function(y) {
-    if (y >= 1125899906842624)  { return y / 1125899906842624 + "P" }
-    else if (y >= 1099511627776){ return y / 1099511627776 + "T" }
-    else if (y >= 1073741824)   { return y / 1073741824 + "G" }
-    else if (y >= 1048576)      { return y / 1048576 + "M" }
-    else if (y >= 1024)         { return y / 1024 + "K" }
-    else if (y < 1 && y > 0)    { return y.toFixed(2) }
-    else if (y == 0)            { return '' }
-    else                        { return y }
-};
-Rickshaw.namespace("Rickshaw.Color.Palette");
-
-Rickshaw.Color.Palette = function(args) {
-
-	var color = new Rickshaw.Fixtures.Color();
-
-	args = args || {};
-	this.schemes = {};
-
-	this.scheme = color.schemes[args.scheme] || args.scheme || color.schemes.colorwheel;
-	this.runningIndex = 0;
-	this.generatorIndex = 0;
-
-	if (args.interpolatedStopCount) {
-		var schemeCount = this.scheme.length - 1;
-		var i, j, scheme = [];
-		for (i = 0; i < schemeCount; i++) {
-			scheme.push(this.scheme[i]);
-			var generator = d3.interpolateHsl(this.scheme[i], this.scheme[i + 1]);
-			for (j = 1; j < args.interpolatedStopCount; j++) {
-				scheme.push(generator((1 / args.interpolatedStopCount) * j));
-			}
-		}
-		scheme.push(this.scheme[this.scheme.length - 1]);
-		this.scheme = scheme;
-	}
-	this.rotateCount = this.scheme.length;
-
-	this.color = function(key) {
-		return this.scheme[key] || this.scheme[this.runningIndex++] || this.interpolateColor() || '#808080';
-	};
-
-	this.interpolateColor = function() {
-		if (!Array.isArray(this.scheme)) return;
-		var color;
-		if (this.generatorIndex == this.rotateCount * 2 - 1) {
-			color = d3.interpolateHsl(this.scheme[this.generatorIndex], this.scheme[0])(0.5);
-			this.generatorIndex = 0;
-			this.rotateCount *= 2;
-		} else {
-			color = d3.interpolateHsl(this.scheme[this.generatorIndex], this.scheme[this.generatorIndex + 1])(0.5);
-			this.generatorIndex++;
-		}
-		this.scheme.push(color);
-		return color;
-	};
-
-};
-Rickshaw.namespace('Rickshaw.Graph.Ajax');
-
-Rickshaw.Graph.Ajax = Rickshaw.Class.create( {
-
-	initialize: function(args) {
-
-		this.dataURL = args.dataURL;
-
-		this.onData = args.onData || function(d) { return d };
-		this.onComplete = args.onComplete || function() {};
-		this.onError = args.onError || function() {};
-
-		this.args = args; // pass through to Rickshaw.Graph
-
-		this.request();
-	},
-
-	request: function() {
-
-		$.ajax( {
-			url: this.dataURL,
-			dataType: 'json',
-			success: this.success.bind(this),
-			error: this.error.bind(this)
-		} );
-	},
-
-	error: function() {
-
-		console.log("error loading dataURL: " + this.dataURL);
-		this.onError(this);
-	},
-
-	success: function(data, status) {
-
-		data = this.onData(data);
-		this.args.series = this._splice({ data: data, series: this.args.series });
-
-		this.graph = new Rickshaw.Graph(this.args);
-		this.graph.render();
-
-		this.onComplete(this);
-	},
-
-	_splice: function(args) {
-
-		var data = args.data;
-		var series = args.series;
-
-		if (!args.series) return data;
-
-		series.forEach( function(s) {
-
-			var seriesKey = s.key || s.name;
-			if (!seriesKey) throw "series needs a key or a name";
-
-			data.forEach( function(d) {
-
-				var dataKey = d.key || d.name;
-				if (!dataKey) throw "data needs a key or a name";
-
-				if (seriesKey == dataKey) {
-					var properties = ['color', 'name', 'data'];
-					properties.forEach( function(p) {
-						s[p] = s[p] || d[p];
-					} );
-				}
-			} );
-		} );
-
-		return series;
-	}
-} );
-
-Rickshaw.namespace('Rickshaw.Graph.Annotate');
-
-Rickshaw.Graph.Annotate = function(args) {
-
-	var graph = this.graph = args.graph;
-	this.elements = { timeline: args.element };
-	
-	var self = this;
-
-	this.data = {};
-
-	this.elements.timeline.classList.add('rickshaw_annotation_timeline');
-
-	this.add = function(time, content, end_time) {
-		self.data[time] = self.data[time] || {'boxes': []};
-		self.data[time].boxes.push({content: content, end: end_time});
-	};
-
-	this.update = function() {
-
-		Rickshaw.keys(self.data).forEach( function(time) {
-
-			var annotation = self.data[time];
-			var left = self.graph.x(time);
-
-			if (left < 0 || left > self.graph.x.range()[1]) {
-				if (annotation.element) {
-					annotation.line.classList.add('offscreen');
-					annotation.element.style.display = 'none';
-				}
-
-				annotation.boxes.forEach( function(box) {
-					if ( box.rangeElement ) box.rangeElement.classList.add('offscreen');
-				});
-
-				return;
-			}
-
-			if (!annotation.element) {
-				var element = annotation.element = document.createElement('div');
-				element.classList.add('annotation');
-				this.elements.timeline.appendChild(element);
-				element.addEventListener('click', function(e) {
-					element.classList.toggle('active');
-					annotation.line.classList.toggle('active');
-					annotation.boxes.forEach( function(box) {
-						if ( box.rangeElement ) box.rangeElement.classList.toggle('active');
-					});
-				}, false);
-					
-			}
-
-			annotation.element.style.left = left + 'px';
-			annotation.element.style.display = 'block';
-
-			annotation.boxes.forEach( function(box) {
-
-
-				var element = box.element;
-
-				if (!element) {
-					element = box.element = document.createElement('div');
-					element.classList.add('content');
-					element.innerHTML = box.content;
-					annotation.element.appendChild(element);
-
-					annotation.line = document.createElement('div');
-					annotation.line.classList.add('annotation_line');
-					self.graph.element.appendChild(annotation.line);
-
-					if ( box.end ) {
-						box.rangeElement = document.createElement('div');
-						box.rangeElement.classList.add('annotation_range');
-						self.graph.element.appendChild(box.rangeElement);
-					}
-
-				}
-
-				if ( box.end ) {
-
-					var annotationRangeStart = left;
-					var annotationRangeEnd   = Math.min( self.graph.x(box.end), self.graph.x.range()[1] );
-
-					// annotation makes more sense at end
-					if ( annotationRangeStart > annotationRangeEnd ) {
-						annotationRangeEnd   = left;
-						annotationRangeStart = Math.max( self.graph.x(box.end), self.graph.x.range()[0] );
-					}
-
-					var annotationRangeWidth = annotationRangeEnd - annotationRangeStart;
-
-					box.rangeElement.style.left  = annotationRangeStart + 'px';
-					box.rangeElement.style.width = annotationRangeWidth + 'px'
-
-					box.rangeElement.classList.remove('offscreen');
-				}
-
-				annotation.line.classList.remove('offscreen');
-				annotation.line.style.left = left + 'px';
-			} );
-		}, this );
-	};
-
-	this.graph.onUpdate( function() { self.update() } );
-};
-Rickshaw.namespace('Rickshaw.Graph.Axis.Time');
-
-Rickshaw.Graph.Axis.Time = function(args) {
-
-	var self = this;
-
-	this.graph = args.graph;
-	this.elements = [];
-	this.ticksTreatment = args.ticksTreatment || 'plain';
-	this.fixedTimeUnit = args.timeUnit;
-
-	var time = new Rickshaw.Fixtures.Time();
-
-	this.appropriateTimeUnit = function() {
-
-		var unit;
-		var units = time.units;
-
-		var domain = this.graph.x.domain();
-		var rangeSeconds = domain[1] - domain[0];
-
-		units.forEach( function(u) {
-			if (Math.floor(rangeSeconds / u.seconds) >= 2) {
-				unit = unit || u;
-			}
-		} );
-
-		return (unit || time.units[time.units.length - 1]);
-	};
-
-	this.tickOffsets = function() {
-
-		var domain = this.graph.x.domain();
-
-		var unit = this.fixedTimeUnit || this.appropriateTimeUnit();
-		var count = Math.ceil((domain[1] - domain[0]) / unit.seconds);
-
-		var runningTick = domain[0];
-
-		var offsets = [];
-
-		for (var i = 0; i < count; i++) {
-
-			tickValue = time.ceil(runningTick, unit);
-			runningTick = tickValue + unit.seconds / 2;
-
-			offsets.push( { value: tickValue, unit: unit } );
-		}
-
-		return offsets;
-	};
-
-	this.render = function() {
-
-		this.elements.forEach( function(e) {
-			e.parentNode.removeChild(e);
-		} );
-
-		this.elements = [];
-
-		var offsets = this.tickOffsets();
-
-		offsets.forEach( function(o) {
-			
-			if (self.graph.x(o.value) > self.graph.x.range()[1]) return;
-	
-			var element = document.createElement('div');
-			element.style.left = self.graph.x(o.value) + 'px';
-			element.classList.add('x_tick');
-			element.classList.add(self.ticksTreatment);
-
-			var title = document.createElement('div');
-			title.classList.add('title');
-			title.innerHTML = o.unit.formatter(new Date(o.value * 1000));
-			element.appendChild(title);
-
-			self.graph.element.appendChild(element);
-			self.elements.push(element);
-
-		} );
-	};
-
-	this.graph.onUpdate( function() { self.render() } );
-};
-
-Rickshaw.namespace('Rickshaw.Graph.Axis.Y');
-
-Rickshaw.Graph.Axis.Y = function(args) {
-
-	var self = this;
-	var berthRate = 0.10;
-
-	this.initialize = function(args) {
-
-		this.graph = args.graph;
-		this.orientation = args.orientation || 'right';
-
-		var pixelsPerTick = args.pixelsPerTick || 75;
-		this.ticks = args.ticks || Math.floor(this.graph.height / pixelsPerTick);
-		this.tickSize = args.tickSize || 4;
-		this.ticksTreatment = args.ticksTreatment || 'plain';
-
-		if (args.element) {
-
-			this.element = args.element;
-			this.vis = d3.select(args.element)
-				.append("svg:svg")
-				.attr('class', 'rickshaw_graph y_axis');
-
-			this.element = this.vis[0][0];
-			this.element.style.position = 'relative';
-
-			this.setSize({ width: args.width, height: args.height });
-
-		} else {
-			this.vis = this.graph.vis;
-		}
-
-		this.graph.onUpdate( function() { self.render() } );
-	};
-
-	this.setSize = function(args) {
-
-		args = args || {};
-
-		if (!this.element) return;
-
-		if (typeof window !== 'undefined') {
-
-			var style = window.getComputedStyle(this.element.parentNode, null);
-			var elementWidth = parseInt(style.getPropertyValue('width'));
-
-			if (!args.auto) {
-				var elementHeight = parseInt(style.getPropertyValue('height'));
-			}
-		}
-
-		this.width = args.width || elementWidth || this.graph.width * berthRate;
-		this.height = args.height || elementHeight || this.graph.height;
-
-		this.vis
-			.attr('width', this.width)
-			.attr('height', this.height * (1 + berthRate));
-
-		var berth = this.height * berthRate;
-		this.element.style.top = -1 * berth + 'px';
-	};
-
-	this.render = function() {
-
-		if (this.graph.height !== this._renderHeight) this.setSize({ auto: true });
-
-		var axis = d3.svg.axis().scale(this.graph.y).orient(this.orientation);
-		axis.tickFormat( args.tickFormat || function(y) { return y } );
-
-		if (this.orientation == 'left') {
-			var berth = this.height * berthRate;
-			var transform = 'translate(' + this.width + ', ' + berth + ')';
-		}
-
-		if (this.element) {
-			this.vis.selectAll('*').remove();
-		}
-
-		this.vis
-			.append("svg:g")
-			.attr("class", ["y_ticks", this.ticksTreatment].join(" "))
-			.attr("transform", transform)
-			.call(axis.ticks(this.ticks).tickSubdivide(0).tickSize(this.tickSize))
-
-		var gridSize = (this.orientation == 'right' ? 1 : -1) * this.graph.width;
-
-		this.graph.vis
-			.append("svg:g")
-			.attr("class", "y_grid")
-			.call(axis.ticks(this.ticks).tickSubdivide(0).tickSize(gridSize));
-
-		this._renderHeight = this.graph.height;
-	};
-
-	this.initialize(args);
-};
-
-Rickshaw.namespace('Rickshaw.Graph.Behavior.Series.Highlight');
-
-Rickshaw.Graph.Behavior.Series.Highlight = function(args) {
-
-	this.graph = args.graph;
-	this.legend = args.legend;
-
-	var self = this;
-
-	var colorSafe = {};
-
-	this.addHighlightEvents = function (l) {
-		l.element.addEventListener( 'mouseover', function(e) {
-
-			self.legend.lines.forEach( function(line) {
-				if (l === line) return;
-				colorSafe[line.series.name] = colorSafe[line.series.name] || line.series.color;
-				line.series.color = d3.interpolateRgb(line.series.color, d3.rgb('#d8d8d8'))(0.8).toString();
-			} );
-
-			self.graph.update();
-
-		}, false );
-
-		l.element.addEventListener( 'mouseout', function(e) {
-
-			self.legend.lines.forEach( function(line) {
-				if (colorSafe[line.series.name]) {
-					line.series.color = colorSafe[line.series.name];
-				}
-			} );
-
-			self.graph.update();
-
-		}, false );
-	};
-
-	if (this.legend) {
-		this.legend.lines.forEach( function(l) {
-			self.addHighlightEvents(l);
-		} );
-	}
-
-};
-Rickshaw.namespace('Rickshaw.Graph.Behavior.Series.Order');
-
-Rickshaw.Graph.Behavior.Series.Order = function(args) {
-
-	this.graph = args.graph;
-	this.legend = args.legend;
-
-	var self = this;
-
-	$(function() {
-		$(self.legend.list).sortable( { 
-			containment: 'parent',
-			tolerance: 'pointer',
-			update: function( event, ui ) {
-				var series = [];
-				$(self.legend.list).find('li').each( function(index, item) {
-					if (!item.series) return;
-					series.push(item.series);
-				} );
-
-				for (var i = self.graph.series.length - 1; i >= 0; i--) {
-					self.graph.series[i] = series.shift();
-				}
-
-				self.graph.update();
-			}
-		} );
-		$(self.legend.list).disableSelection();
-	});
-
-	//hack to make jquery-ui sortable behave
-	this.graph.onUpdate( function() {
-    // commenting out since this breaks rendering in IE9
-		//var h = window.getComputedStyle(self.legend.element).height;
-		//self.legend.element.style.height = h;
-	} );
-};
-Rickshaw.namespace('Rickshaw.Graph.Behavior.Series.Toggle');
-
-Rickshaw.Graph.Behavior.Series.Toggle = function(args) {
-
-	this.graph = args.graph;
-	this.legend = args.legend;
-
-	var self = this;
-
-	this.addAnchor = function(line) {
-		var anchor = document.createElement('a');
-		anchor.innerHTML = '&#10004;';
-		anchor.classList.add('action');
-		line.element.insertBefore(anchor, line.element.firstChild);
-
-		anchor.onclick = function(e) {
-			if (line.series.disabled) {
-				line.series.enable();
-				line.element.classList.remove('disabled');
-			} else { 
-				line.series.disable();
-				line.element.classList.add('disabled');
-			}
-		}
-		
-                var label = line.element.getElementsByTagName('span')[0];
-                label.onclick = function(e){
-
-                        var disableAllOtherLines = line.series.disabled;
-                        if ( ! disableAllOtherLines ) {
-                                for ( var i = 0; i < self.legend.lines.length; i++ ) {
-                                        var l = self.legend.lines[i];
-                                        if ( line.series === l.series ) {
-                                                // noop
-                                        } else if ( l.series.disabled ) {
-                                                // noop
-                                        } else {
-                                                disableAllOtherLines = true;
-                                                break;
-                                        }
-                                }
-                        }
-
-                        // show all or none
-                        if ( disableAllOtherLines ) {
-
-                                // these must happen first or else we try ( and probably fail ) to make a no line graph
-                                line.series.enable();
-                                line.element.classList.remove('disabled');
-
-                                self.legend.lines.forEach(function(l){
-                                        if ( line.series === l.series ) {
-                                                // noop
-                                        } else {
-                                                l.series.disable();
-                                                l.element.classList.add('disabled');
-                                        }
-                                });
-
-                        } else {
-
-                                self.legend.lines.forEach(function(l){
-                                        l.series.enable();
-                                        l.element.classList.remove('disabled');
-                                });
-
-                        }
-
-                };
-
-	};
-
-	if (this.legend) {
-
-                $(this.legend.list).sortable( {
-                        start: function(event, ui) {
-                                ui.item.bind('no.onclick',
-                                        function(event) {
-                                                event.preventDefault();
-                                        }
-                                );
-                        },
-                        stop: function(event, ui) {
-                                setTimeout(function(){
-                                        ui.item.unbind('no.onclick');
-                                }, 250);
-                        }
-                })
-
-		this.legend.lines.forEach( function(l) {
-			self.addAnchor(l);
-		} );
-	}
-
-	this._addBehavior = function() {
-
-		this.graph.series.forEach( function(s) {
-			
-			s.disable = function() {
-
-				if (self.graph.series.length <= 1) {
-					throw('only one series left');
-				}
-				
-				s.disabled = true;
-				self.graph.update();
-			};
-
-			s.enable = function() {
-				s.disabled = false;
-				self.graph.update();
-			};
-		} );
-	};
-	this._addBehavior();
-
-	this.updateBehaviour = function () { this._addBehavior() };
-
-};
-Rickshaw.namespace('Rickshaw.Graph.HoverDetail');
-
-Rickshaw.Graph.HoverDetail = Rickshaw.Class.create({
-
-	initialize: function(args) {
-
-		var graph = this.graph = args.graph;
-
-		this.xFormatter = args.xFormatter || function(x) {
-			return new Date( x * 1000 ).toUTCString();
-		};
-
-		this.yFormatter = args.yFormatter || function(y) {
-			return y.toFixed(2);
-		};
-
-		var element = this.element = document.createElement('div');
-		element.className = 'detail';
-
-		this.visible = true;
-		graph.element.appendChild(element);
-
-		this.lastEvent = null;
-		this._addListeners();
-
-		this.onShow = args.onShow;
-		this.onHide = args.onHide;
-		this.onRender = args.onRender;
-
-		this.formatter = args.formatter || this.formatter;
-	},
-
-	formatter: function(series, x, y, formattedX, formattedY, d) {
-		return series.name + ':&nbsp;' + formattedY;
-	},
-
-	update: function(e) {
-
-		e = e || this.lastEvent;
-		if (!e) return;
-		this.lastEvent = e;
-
-		if (!e.target.nodeName.match(/^(path|svg|rect)$/)) return;
-
-		var graph = this.graph;
-
-		var eventX = e.offsetX || e.layerX;
-		var eventY = e.offsetY || e.layerY;
-
-		var domainX = graph.x.invert(eventX);
-		var stackedData = graph.stackedData;
-
-		var topSeriesData = stackedData.slice(-1).shift();
-
-		var domainIndexScale = d3.scale.linear()
-			.domain([topSeriesData[0].x, topSeriesData.slice(-1).shift().x])
-			.range([0, topSeriesData.length]);
-
-		var approximateIndex = Math.floor(domainIndexScale(domainX));
-		var dataIndex = Math.min(approximateIndex || 0, stackedData[0].length - 1);
-
-		for (var i = approximateIndex; i < stackedData[0].length - 1;) {
-
-			if (!stackedData[0][i] || !stackedData[0][i + 1]) {
-				break;
-			}
-
-			if (stackedData[0][i].x <= domainX && stackedData[0][i + 1].x > domainX) {
-				dataIndex = i;
-				break;
-			}
-			if (stackedData[0][i + 1] <= domainX) { i++ } else { i-- }
-		}
-
-		var domainX = stackedData[0][dataIndex].x;
-		var formattedXValue = this.xFormatter(domainX);
-		var graphX = graph.x(domainX);
-		var order = 0;
-
-		var detail = graph.series.active()
-			.map( function(s) { return { order: order++, series: s, name: s.name, value: s.stack[dataIndex] } } );
-
-		var activeItem;
-
-		var sortFn = function(a, b) {
-			return (a.value.y0 + a.value.y) - (b.value.y0 + b.value.y);
-		};
-
-		var domainMouseY = graph.y.magnitude.invert(graph.element.offsetHeight - eventY);
-
-		detail.sort(sortFn).forEach( function(d) {
-
-			d.formattedYValue = (this.yFormatter.constructor == Array) ?
-				this.yFormatter[detail.indexOf(d)](d.value.y) :
-				this.yFormatter(d.value.y);
-
-			d.graphX = graphX;
-			d.graphY = graph.y(d.value.y0 + d.value.y);
-
-			if (domainMouseY > d.value.y0 && domainMouseY < d.value.y0 + d.value.y && !activeItem) {
-				activeItem = d;
-				d.active = true;
-			}
-
-		}, this );
-
-		this.element.innerHTML = '';
-		this.element.style.left = graph.x(domainX) + 'px';
-
-		if (this.visible) {
-			this.render( {
-				detail: detail,
-				domainX: domainX,
-				formattedXValue: formattedXValue,
-				mouseX: eventX,
-				mouseY: eventY
-			} );
-		}
-	},
-
-	hide: function() {
-		this.visible = false;
-		this.element.classList.add('inactive');
-
-		if (typeof this.onHide == 'function') {
-			this.onHide();
-		}
-	},
-
-	show: function() {
-		this.visible = true;
-		this.element.classList.remove('inactive');
-
-		if (typeof this.onShow == 'function') {
-			this.onShow();
-		}
-	},
-
-	render: function(args) {
-
-		var detail = args.detail;
-		var domainX = args.domainX;
-
-		var mouseX = args.mouseX;
-		var mouseY = args.mouseY;
-
-		var formattedXValue = args.formattedXValue;
-
-		var xLabel = document.createElement('div');
-		xLabel.className = 'x_label';
-		xLabel.innerHTML = formattedXValue;
-		this.element.appendChild(xLabel);
-
-		detail.forEach( function(d) {
-
-			var item = document.createElement('div');
-			item.className = 'item';
-			item.innerHTML = this.formatter(d.series, domainX, d.value.y, formattedXValue, d.formattedYValue, d);
-			item.style.top = this.graph.y(d.value.y0 + d.value.y) + 'px';
-
-			this.element.appendChild(item);
-
-			var dot = document.createElement('div');
-			dot.className = 'dot';
-			dot.style.top = item.style.top;
-			dot.style.borderColor = d.series.color;
-
-			this.element.appendChild(dot);
-
-			if (d.active) {
-				item.className = 'item active';
-				dot.className = 'dot active';
-			}
-
-		}, this );
-
-		this.show();
-
-		if (typeof this.onRender == 'function') {
-			this.onRender(args);
-		}
-	},
-
-	_addListeners: function() {
-
-		this.graph.element.addEventListener(
-			'mousemove',
-			function(e) {
-				this.visible = true;
-				this.update(e)
-			}.bind(this),
-			false
-		);
-
-		this.graph.onUpdate( function() { this.update() }.bind(this) );
-
-		this.graph.element.addEventListener(
-			'mouseout',
-			function(e) {
-				if (e.relatedTarget && !(e.relatedTarget.compareDocumentPosition(this.graph.element) & Node.DOCUMENT_POSITION_CONTAINS)) {
-					this.hide();
-				}
-			 }.bind(this),
-			false
-		);
-	}
-});
-
-Rickshaw.namespace('Rickshaw.Graph.JSONP');
-
-Rickshaw.Graph.JSONP = Rickshaw.Class.create( Rickshaw.Graph.Ajax, {
-
-	request: function() {
-
-		$.ajax( {
-			url: this.dataURL,
-			dataType: 'jsonp',
-			success: this.success.bind(this),
-			error: this.error.bind(this)
-		} );
-	}
-} );
-Rickshaw.namespace('Rickshaw.Graph.Legend');
-
-Rickshaw.Graph.Legend = function(args) {
-
-	var element = this.element = args.element;
-	var graph = this.graph = args.graph;
-
-	var self = this;
-
-	element.classList.add('rickshaw_legend');
-
-	var list = this.list = document.createElement('ul');
-	element.appendChild(list);
-
-	var series = graph.series
-		.map( function(s) { return s } )
-		.reverse();
-
-	this.lines = [];
-
-	this.addLine = function (series) {
-		var line = document.createElement('li');
-		line.className = 'line';
-
-		var swatch = document.createElement('div');
-		swatch.className = 'swatch';
-		swatch.style.backgroundColor = series.color;
-
-		line.appendChild(swatch);
-
-		var label = document.createElement('span');
-		label.className = 'label';
-		label.innerHTML = series.name;
-
-		line.appendChild(label);
-		list.appendChild(line);
-
-		line.series = series;
-
-		if (series.noLegend) {
-			line.style.display = 'none';
-		}
-
-		var _line = { element: line, series: series };
-		if (self.shelving) {
-			self.shelving.addAnchor(_line);
-			self.shelving.updateBehaviour();
-		}
-		if (self.highlighter) {
-			self.highlighter.addHighlightEvents(_line);
-		}
-		self.lines.push(_line);
-	};
-
-	series.forEach( function(s) {
-		self.addLine(s);
-	} );
-
-	graph.onUpdate( function() {} );
-};
-Rickshaw.namespace('Rickshaw.Graph.RangeSlider');
-
-Rickshaw.Graph.RangeSlider = function(args) {
-
-	var element = this.element = args.element;
-	var graph = this.graph = args.graph;
-
-	$( function() {
-		$(element).slider( {
-
-			range: true,
-			min: graph.dataDomain()[0],
-			max: graph.dataDomain()[1],
-			values: [ 
-				graph.dataDomain()[0],
-				graph.dataDomain()[1]
-			],
-			slide: function( event, ui ) {
-
-				graph.window.xMin = ui.values[0];
-				graph.window.xMax = ui.values[1];
-				graph.update();
-
-				// if we're at an extreme, stick there
-				if (graph.dataDomain()[0] == ui.values[0]) {
-					graph.window.xMin = undefined;
-				}
-				if (graph.dataDomain()[1] == ui.values[1]) {
-					graph.window.xMax = undefined;
-				}
-			}
-		} );
-	} );
-
-	element[0].style.width = graph.width + 'px';
-
-	graph.onUpdate( function() {
-
-		var values = $(element).slider('option', 'values');
-
-		$(element).slider('option', 'min', graph.dataDomain()[0]);
-		$(element).slider('option', 'max', graph.dataDomain()[1]);
-
-		if (graph.window.xMin == undefined) {
-			values[0] = graph.dataDomain()[0];
-		}
-		if (graph.window.xMax == undefined) {
-			values[1] = graph.dataDomain()[1];
-		}
-
-		$(element).slider('option', 'values', values);
-
-	} );
-};
-
-Rickshaw.namespace("Rickshaw.Graph.Renderer");
-
-Rickshaw.Graph.Renderer = Rickshaw.Class.create( {
-
-	initialize: function(args) {
-		this.graph = args.graph;
-		this.tension = args.tension || this.tension;
-		this.graph.unstacker = this.graph.unstacker || new Rickshaw.Graph.Unstacker( { graph: this.graph } );
-		this.configure(args);
-	},
-
-	seriesPathFactory: function() {
-		//implement in subclass
-	},
-
-	seriesStrokeFactory: function() {
-		// implement in subclass
-	},
-
-	defaults: function() {
-		return {
-			tension: 0.8,
-			strokeWidth: 2,
-			unstack: true,
-			padding: { top: 0.01, right: 0, bottom: 0.01, left: 0 },
-			stroke: false,
-			fill: false
-		};
-	},
-
-	domain: function() {
-
-		var values = [];
-		var stackedData = this.graph.stackedData || this.graph.stackData();
-
-		var topSeriesData = this.unstack ? stackedData : [ stackedData.slice(-1).shift() ];
-
-		topSeriesData.forEach( function(series) {
-			series.forEach( function(d) {
-				values.push( d.y + d.y0 );
-			} );
-		} );
-
-		var xMin = stackedData[0][0].x;
-		var xMax = stackedData[0][ stackedData[0].length - 1 ].x;
-
-		xMin -= (xMax - xMin) * this.padding.left;
-		xMax += (xMax - xMin) * this.padding.right;
-
-		var yMin = this.graph.min === 'auto' ? d3.min( values ) : this.graph.min || 0;
-		var yMax = this.graph.max || d3.max( values );
-
-		if (this.graph.min === 'auto' || yMin < 0) {
-			yMin -= (yMax - yMin) * this.padding.bottom;
-		}
-
-		if (this.graph.max === undefined) {
-			yMax += (yMax - yMin) * this.padding.top;
-		}
-
-		return { x: [xMin, xMax], y: [yMin, yMax] };
-	},
-
-	render: function() {
-
-		var graph = this.graph;
-
-		graph.vis.selectAll('*').remove();
-
-		var nodes = graph.vis.selectAll("path")
-			.data(this.graph.stackedData)
-			.enter().append("svg:path")
-			.attr("d", this.seriesPathFactory());
-
-		var i = 0;
-		graph.series.forEach( function(series) {
-			if (series.disabled) return;
-			series.path = nodes[0][i++];
-			this._styleSeries(series);
-		}, this );
-	},
-
-	_styleSeries: function(series) {
-
-		var fill = this.fill ? series.color : 'none';
-		var stroke = this.stroke ? series.color : 'none';
-
-		series.path.setAttribute('fill', fill);
-		series.path.setAttribute('stroke', stroke);
-		series.path.setAttribute('stroke-width', this.strokeWidth);
-		series.path.setAttribute('class', series.className);
-	},
-
-	configure: function(args) {
-
-		args = args || {};
-
-		Rickshaw.keys(this.defaults()).forEach( function(key) {
-
-			if (!args.hasOwnProperty(key)) {
-				this[key] = this[key] || this.graph[key] || this.defaults()[key];
-				return;
-			}
-
-			if (typeof this.defaults()[key] == 'object') {
-
-				Rickshaw.keys(this.defaults()[key]).forEach( function(k) {
-
-					this[key][k] =
-						args[key][k] !== undefined ? args[key][k] :
-						this[key][k] !== undefined ? this[key][k] :
-						this.defaults()[key][k];
-				}, this );
-
-			} else {
-				this[key] =
-					args[key] !== undefined ? args[key] :
-					this[key] !== undefined ? this[key] :
-					this.graph[key] !== undefined ? this.graph[key] :
-					this.defaults()[key];
-			}
-
-		}, this );
-	},
-
-	setStrokeWidth: function(strokeWidth) {
-		if (strokeWidth !== undefined) {
-			this.strokeWidth = strokeWidth;
-		}
-	},
-
-	setTension: function(tension) {
-		if (tension !== undefined) {
-			this.tension = tension;
-		}
-	}
-} );
-
-Rickshaw.namespace('Rickshaw.Graph.Renderer.Line');
-
-Rickshaw.Graph.Renderer.Line = Rickshaw.Class.create( Rickshaw.Graph.Renderer, {
-
-	name: 'line',
-
-	defaults: function($super) {
-
-		return Rickshaw.extend( $super(), {
-			unstack: true,
-			fill: false,
-			stroke: true
-		} );
-	},
-
-	seriesPathFactory: function() {
-
-		var graph = this.graph;
-
-		return d3.svg.line()
-			.x( function(d) { return graph.x(d.x) } )
-			.y( function(d) { return graph.y(d.y) } )
-			.interpolate(this.graph.interpolation).tension(this.tension);
-	}
-} );
-
-Rickshaw.namespace('Rickshaw.Graph.Renderer.Stack');
-
-Rickshaw.Graph.Renderer.Stack = Rickshaw.Class.create( Rickshaw.Graph.Renderer, {
-
-	name: 'stack',
-
-	defaults: function($super) {
-
-		return Rickshaw.extend( $super(), {
-			fill: true,
-			stroke: false,
-			unstack: false
-		} );
-	},
-
-	seriesPathFactory: function() {
-
-		var graph = this.graph;
-
-		return d3.svg.area()
-			.x( function(d) { return graph.x(d.x) } )
-			.y0( function(d) { return graph.y(d.y0) } )
-			.y1( function(d) { return graph.y(d.y + d.y0) } )
-			.interpolate(this.graph.interpolation).tension(this.tension);
-	}
-} );
-
-Rickshaw.namespace('Rickshaw.Graph.Renderer.Bar');
-
-Rickshaw.Graph.Renderer.Bar = Rickshaw.Class.create( Rickshaw.Graph.Renderer, {
-
-	name: 'bar',
-
-	defaults: function($super) {
-
-		var defaults = Rickshaw.extend( $super(), {
-			gapSize: 0.05,
-			unstack: false
-		} );
-
-		delete defaults.tension;
-		return defaults;
-	},
-
-	initialize: function($super, args) {
-		args = args || {};
-		this.gapSize = args.gapSize || this.gapSize;
-		$super(args);
-	},
-
-	domain: function($super) {
-
-		var domain = $super();
-
-		var frequentInterval = this._frequentInterval();
-		domain.x[1] += parseInt(frequentInterval.magnitude);
-
-		return domain;
-	},
-
-	barWidth: function() {
-
-		var stackedData = this.graph.stackedData || this.graph.stackData();
-		var data = stackedData.slice(-1).shift();
-
-		var frequentInterval = this._frequentInterval();
-		var barWidth = this.graph.x(data[0].x + frequentInterval.magnitude * (1 - this.gapSize)); 
-
-		return barWidth;
-	},
-
-	render: function() {
-
-		var graph = this.graph;
-
-		graph.vis.selectAll('*').remove();
-
-		var barWidth = this.barWidth();
-		var barXOffset = 0;
-
-		var activeSeriesCount = graph.series.filter( function(s) { return !s.disabled; } ).length;
-		var seriesBarWidth = this.unstack ? barWidth / activeSeriesCount : barWidth;
-
-		var transform = function(d) {
-			// add a matrix transform for negative values
-			var matrix = [ 1, 0, 0, (d.y < 0 ? -1 : 1), 0, (d.y < 0 ? graph.y.magnitude(Math.abs(d.y)) * 2 : 0) ];
-			return "matrix(" + matrix.join(',') + ")";
-		};
-
-		graph.series.forEach( function(series) {
-
-			if (series.disabled) return;
-
-			var nodes = graph.vis.selectAll("path")
-				.data(series.stack)
-				.enter().append("svg:rect")
-				.attr("x", function(d) { return graph.x(d.x) + barXOffset })
-				.attr("y", function(d) { return (graph.y(d.y0 + Math.abs(d.y))) * (d.y < 0 ? -1 : 1 ) })
-				.attr("width", seriesBarWidth)
-				.attr("height", function(d) { return graph.y.magnitude(Math.abs(d.y)) })
-				.attr("transform", transform);
-
-			Array.prototype.forEach.call(nodes[0], function(n) {
-				n.setAttribute('fill', series.color);
-			} );
-
-			if (this.unstack) barXOffset += seriesBarWidth;
-
-		}, this );
-	},
-
-	_frequentInterval: function() {
-
-		var stackedData = this.graph.stackedData || this.graph.stackData();
-		var data = stackedData.slice(-1).shift();
-
-		var intervalCounts = {};
-
-		for (var i = 0; i < data.length - 1; i++) {
-			var interval = data[i + 1].x - data[i].x;
-			intervalCounts[interval] = intervalCounts[interval] || 0;
-			intervalCounts[interval]++;
-		}
-
-		var frequentInterval = { count: 0 };
-
-		Rickshaw.keys(intervalCounts).forEach( function(i) {
-			if (frequentInterval.count < intervalCounts[i]) {
-
-				frequentInterval = {
-					count: intervalCounts[i],
-					magnitude: i
-				};
-			}
-		} );
-
-		this._frequentInterval = function() { return frequentInterval };
-
-		return frequentInterval;
-	}
-} );
-
-Rickshaw.namespace('Rickshaw.Graph.Renderer.Area');
-
-Rickshaw.Graph.Renderer.Area = Rickshaw.Class.create( Rickshaw.Graph.Renderer, {
-
-	name: 'area',
-
-	defaults: function($super) {
-
-		return Rickshaw.extend( $super(), {
-			unstack: false,
-			fill: false,
-			stroke: false
-		} );
-	},
-
-	seriesPathFactory: function() {
-
-		var graph = this.graph;
-
-		return d3.svg.area()
-			.x( function(d) { return graph.x(d.x) } )
-			.y0( function(d) { return graph.y(d.y0) } )
-			.y1( function(d) { return graph.y(d.y + d.y0) } )
-			.interpolate(graph.interpolation).tension(this.tension);
-	},
-
-	seriesStrokeFactory: function() {
-
-		var graph = this.graph;
-
-		return d3.svg.line()
-			.x( function(d) { return graph.x(d.x) } )
-			.y( function(d) { return graph.y(d.y + d.y0) } )
-			.interpolate(graph.interpolation).tension(this.tension);
-	},
-
-	render: function() {
-
-		var graph = this.graph;
-
-		graph.vis.selectAll('*').remove();
-
-		var nodes = graph.vis.selectAll("path")
-			.data(this.graph.stackedData)
-			.enter().insert("svg:g", 'g');
-
-		nodes.append("svg:path")
-			.attr("d", this.seriesPathFactory())
-			.attr("class", 'area');
-
-		if (this.stroke) {
-			nodes.append("svg:path")
-				.attr("d", this.seriesStrokeFactory())
-				.attr("class", 'line');
-		}
-
-		var i = 0;
-		graph.series.forEach( function(series) {
-			if (series.disabled) return;
-			series.path = nodes[0][i++];
-			this._styleSeries(series);
-		}, this );
-	},
-
-	_styleSeries: function(series) {
-
-		if (!series.path) return;
-
-		d3.select(series.path).select('.area')
-			.attr('fill', series.color);
-
-		if (this.stroke) {
-			d3.select(series.path).select('.line')
-				.attr('fill', 'none')
-				.attr('stroke', series.stroke || d3.interpolateRgb(series.color, 'black')(0.125))
-				.attr('stroke-width', this.strokeWidth);
-		}
-
-		if (series.className) {
-			series.path.setAttribute('class', series.className);
-		}
-	}
-} );
-
-Rickshaw.namespace('Rickshaw.Graph.Renderer.ScatterPlot');
-
-Rickshaw.Graph.Renderer.ScatterPlot = Rickshaw.Class.create( Rickshaw.Graph.Renderer, {
-
-	name: 'scatterplot',
-
-	defaults: function($super) {
-
-		return Rickshaw.extend( $super(), {
-			unstack: true,
-			fill: true,
-			stroke: false,
-			padding:{ top: 0.01, right: 0.01, bottom: 0.01, left: 0.01 },
-			dotSize: 4
-		} );
-	},
-
-	initialize: function($super, args) {
-		$super(args);
-	},
-
-	render: function() {
-
-		var graph = this.graph;
-
-		graph.vis.selectAll('*').remove();
-
-		graph.series.forEach( function(series) {
-
-			if (series.disabled) return;
-
-			var nodes = graph.vis.selectAll("path")
-				.data(series.stack)
-				.enter().append("svg:circle")
-				.attr("cx", function(d) { return graph.x(d.x) })
-				.attr("cy", function(d) { return graph.y(d.y) })
-				.attr("r", function(d) { return ("r" in d) ? d.r : graph.renderer.dotSize});
-
-			Array.prototype.forEach.call(nodes[0], function(n) {
-				n.setAttribute('fill', series.color);
-			} );
-
-		}, this );
-	}
-} );
-Rickshaw.namespace('Rickshaw.Graph.Smoother');
-
-Rickshaw.Graph.Smoother = function(args) {
-
-	this.graph = args.graph;
-	this.element = args.element;
-
-	var self = this;
-
-	this.aggregationScale = 1;
-
-	if (this.element) {
-
-		$( function() {
-			$(self.element).slider( {
-				min: 1,
-				max: 100,
-				slide: function( event, ui ) {
-					self.setScale(ui.value);
-					self.graph.update();
-				}
-			} );
-		} );
-	}
-
-	self.graph.stackData.hooks.data.push( {
-		name: 'smoother',
-		orderPosition: 50,
-		f: function(data) {
-
-			var aggregatedData = [];
-
-			data.forEach( function(seriesData) {
-				
-				var aggregatedSeriesData = [];
-
-				while (seriesData.length) {
-
-					var avgX = 0, avgY = 0;
-					var slice = seriesData.splice(0, self.aggregationScale);
-
-					slice.forEach( function(d) {
-						avgX += d.x / slice.length;
-						avgY += d.y / slice.length;
-					} );
-
-					aggregatedSeriesData.push( { x: avgX, y: avgY } );
-				}
-
-				aggregatedData.push(aggregatedSeriesData);
-			} );
-
-			return aggregatedData;
-		}
-	} );
-
-	this.setScale = function(scale) {
-
-		if (scale < 1) {
-			throw "scale out of range: " + scale;
-		}
-
-		this.aggregationScale = scale;
-		this.graph.update();
-	}
-};
-
-Rickshaw.namespace('Rickshaw.Graph.Unstacker');
-
-Rickshaw.Graph.Unstacker = function(args) {
-
-	this.graph = args.graph;
-	var self = this;
-
-	this.graph.stackData.hooks.after.push( {
-		name: 'unstacker',
-		f: function(data) {
-
-			if (!self.graph.renderer.unstack) return data;
-
-			data.forEach( function(seriesData) {
-				seriesData.forEach( function(d) {
-					d.y0 = 0;
-				} );
-			} );
-
-			return data;
-		}
-	} );
-};
-
-Rickshaw.namespace('Rickshaw.Series');
-
-Rickshaw.Series = Rickshaw.Class.create( Array, {
-
-	initialize: function (data, palette, options) {
-
-		options = options || {}
-
-		this.palette = new Rickshaw.Color.Palette(palette);
-
-		this.timeBase = typeof(options.timeBase) === 'undefined' ? 
-			Math.floor(new Date().getTime() / 1000) : 
-			options.timeBase;
-
-		var timeInterval = typeof(options.timeInterval) == 'undefined' ?
-			1000 :
-			options.timeInterval;
-
-		this.setTimeInterval(timeInterval);
-
-		if (data && (typeof(data) == "object") && (data instanceof Array)) {
-			data.forEach( function(item) { this.addItem(item) }, this );
-		}
-	},
-
-	addItem: function(item) {
-
-		if (typeof(item.name) === 'undefined') {
-			throw('addItem() needs a name');
-		}
-
-		item.color = (item.color || this.palette.color(item.name));
-		item.data = (item.data || []);
-
-		// backfill, if necessary
-		if ((item.data.length == 0) && this.length && (this.getIndex() > 0)) {
-			this[0].data.forEach( function(plot) {
-				item.data.push({ x: plot.x, y: 0 });
-			} );
-		} else if (item.data.length == 0) {
-			item.data.push({ x: this.timeBase - (this.timeInterval || 0), y: 0 });
-		} 
-
-		this.push(item);
-
-		if (this.legend) {
-			this.legend.addLine(this.itemByName(item.name));
-		}
-	},
-
-	addData: function(data) {
-
-		var index = this.getIndex();
-
-		Rickshaw.keys(data).forEach( function(name) {
-			if (! this.itemByName(name)) {
-				this.addItem({ name: name });
-			}
-		}, this );
-
-		this.forEach( function(item) {
-			item.data.push({ 
-				x: (index * this.timeInterval || 1) + this.timeBase, 
-				y: (data[item.name] || 0) 
-			});
-		}, this );
-	},
-
-	getIndex: function () {
-		return (this[0] && this[0].data && this[0].data.length) ? this[0].data.length : 0;
-	},
-
-	itemByName: function(name) {
-
-		for (var i = 0; i < this.length; i++) {
-			if (this[i].name == name)
-				return this[i];
-		}
-	},
-
-	setTimeInterval: function(iv) {
-		this.timeInterval = iv / 1000;
-	},
-
-	setTimeBase: function (t) {
-		this.timeBase = t;
-	},
-
-	dump: function() {
-
-		var data = {
-			timeBase: this.timeBase,
-			timeInterval: this.timeInterval,
-			items: []
-		};
-
-		this.forEach( function(item) {
-
-			var newItem = {
-				color: item.color,
-				name: item.name,
-				data: []
-			};
-
-			item.data.forEach( function(plot) {
-				newItem.data.push({ x: plot.x, y: plot.y });
-			} );
-
-			data.items.push(newItem);
-		} );
-
-		return data;
-	},
-
-	load: function(data) {
-
-		if (data.timeInterval) {
-			this.timeInterval = data.timeInterval;
-		}
-
-		if (data.timeBase) {
-			this.timeBase = data.timeBase;
-		}
-
-		if (data.items) {
-			data.items.forEach( function(item) {
-				this.push(item);
-				if (this.legend) {
-					this.legend.addLine(this.itemByName(item.name));
-				}
-
-			}, this );
-		}
-	}
-} );
-
-Rickshaw.Series.zeroFill = function(series) {
-
-	var x;
-	var i = 0;
-
-	var data = series.map( function(s) { return s.data } );
-
-	while ( i < Math.max.apply(null, data.map( function(d) { return d.length } )) ) {
-
-		x = Math.min.apply( null, 
-			data
-				.filter(function(d) { return d[i] })
-				.map(function(d) { return d[i].x })
-		);
-
-		data.forEach( function(d) {
-			if (!d[i] || d[i].x != x) {
-				d.splice(i, 0, { x: x, y: 0 });
-			}
-		} );
-
-		i++;
-	}
-};
-Rickshaw.namespace('Rickshaw.Series.FixedDuration');
-
-Rickshaw.Series.FixedDuration = Rickshaw.Class.create(Rickshaw.Series, {
-
-	initialize: function (data, palette, options) {
-
-		var options = options || {}
-
-		if (typeof(options.timeInterval) === 'undefined') {
-			throw new Error('FixedDuration series requires timeInterval');
-		}
-
-		if (typeof(options.maxDataPoints) === 'undefined') {
-			throw new Error('FixedDuration series requires maxDataPoints');
-		}
-
-		this.palette = new Rickshaw.Color.Palette(palette);
-		this.timeBase = typeof(options.timeBase) === 'undefined' ? Math.floor(new Date().getTime() / 1000) : options.timeBase;
-		this.setTimeInterval(options.timeInterval);
-
-		if (this[0] && this[0].data && this[0].data.length) {
-			this.currentSize = this[0].data.length;
-			this.currentIndex = this[0].data.length;
-		} else {
-			this.currentSize  = 0;
-			this.currentIndex = 0;
-		}
-
-		this.maxDataPoints = options.maxDataPoints;
-
-
-		if (data && (typeof(data) == "object") && (data instanceof Array)) {
-			data.forEach( function (item) { this.addItem(item) }, this );
-			this.currentSize  += 1;
-			this.currentIndex += 1;
-		}
-
-		// reset timeBase for zero-filled values if needed
-		this.timeBase -= (this.maxDataPoints - this.currentSize) * this.timeInterval;
-
-		// zero-fill up to maxDataPoints size if we don't have that much data yet
-		if ((typeof(this.maxDataPoints) !== 'undefined') && (this.currentSize < this.maxDataPoints)) {
-			for (var i = this.maxDataPoints - this.currentSize - 1; i > 0; i--) {
-				this.currentSize  += 1;
-				this.currentIndex += 1;
-				this.forEach( function (item) {
-					item.data.unshift({ x: ((i-1) * this.timeInterval || 1) + this.timeBase, y: 0, i: i });
-				}, this );
-			}
-		}
-	},
-
-	addData: function($super, data) {
-
-		$super(data)
-
-		this.currentSize += 1;
-		this.currentIndex += 1;
-
-		if (this.maxDataPoints !== undefined) {
-			while (this.currentSize > this.maxDataPoints) {
-				this.dropData();
-			}
-		}
-	},
-
-	dropData: function() {
-
-		this.forEach(function(item) {
-			item.data.splice(0, 1);
-		} );
-
-		this.currentSize -= 1;
-	},
-
-	getIndex: function () {
-		return this.currentIndex;
-	}
-} );
-


[31/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/font/fontawesome-webfont.ttf
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/font/fontawesome-webfont.ttf b/contrib/views/slider/src/main/resources/ui/app/assets/font/fontawesome-webfont.ttf
deleted file mode 100644
index d365924..0000000
Binary files a/contrib/views/slider/src/main/resources/ui/app/assets/font/fontawesome-webfont.ttf and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/font/fontawesome-webfont.woff
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/font/fontawesome-webfont.woff b/contrib/views/slider/src/main/resources/ui/app/assets/font/fontawesome-webfont.woff
deleted file mode 100644
index b9bd17e..0000000
Binary files a/contrib/views/slider/src/main/resources/ui/app/assets/font/fontawesome-webfont.woff and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/images/.gitkeep
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/images/.gitkeep b/contrib/views/slider/src/main/resources/ui/app/assets/images/.gitkeep
deleted file mode 100644
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_flat_0_aaaaaa_40x100.png
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_flat_0_aaaaaa_40x100.png b/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_flat_0_aaaaaa_40x100.png
deleted file mode 100644
index 5b5dab2..0000000
Binary files a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_flat_0_aaaaaa_40x100.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_glass_55_fbf9ee_1x400.png
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_glass_55_fbf9ee_1x400.png b/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_glass_55_fbf9ee_1x400.png
deleted file mode 100644
index ad3d634..0000000
Binary files a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_glass_55_fbf9ee_1x400.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_glass_65_ffffff_1x400.png
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_glass_65_ffffff_1x400.png b/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_glass_65_ffffff_1x400.png
deleted file mode 100644
index 42ccba2..0000000
Binary files a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_glass_65_ffffff_1x400.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_glass_75_dadada_1x400.png
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_glass_75_dadada_1x400.png b/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_glass_75_dadada_1x400.png
deleted file mode 100644
index 5a46b47..0000000
Binary files a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_glass_75_dadada_1x400.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_glass_75_e6e6e6_1x400.png
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_glass_75_e6e6e6_1x400.png b/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_glass_75_e6e6e6_1x400.png
deleted file mode 100644
index 86c2baa..0000000
Binary files a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_glass_75_e6e6e6_1x400.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_glass_75_ffffff_1x400.png
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_glass_75_ffffff_1x400.png b/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_glass_75_ffffff_1x400.png
deleted file mode 100644
index e65ca12..0000000
Binary files a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_glass_75_ffffff_1x400.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_highlight-soft_75_cccccc_1x100.png
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_highlight-soft_75_cccccc_1x100.png b/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_highlight-soft_75_cccccc_1x100.png
deleted file mode 100644
index 7c9fa6c..0000000
Binary files a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_highlight-soft_75_cccccc_1x100.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_inset-soft_95_fef1ec_1x100.png
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_inset-soft_95_fef1ec_1x100.png b/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_inset-soft_95_fef1ec_1x100.png
deleted file mode 100644
index 0e05810..0000000
Binary files a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-bg_inset-soft_95_fef1ec_1x100.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_222222_256x240.png
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_222222_256x240.png b/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_222222_256x240.png
deleted file mode 100644
index b273ff1..0000000
Binary files a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_222222_256x240.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_2e83ff_256x240.png
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_2e83ff_256x240.png b/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_2e83ff_256x240.png
deleted file mode 100644
index 09d1cdc..0000000
Binary files a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_2e83ff_256x240.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_454545_256x240.png
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_454545_256x240.png b/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_454545_256x240.png
deleted file mode 100644
index 59bd45b..0000000
Binary files a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_454545_256x240.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_888888_256x240.png
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_888888_256x240.png b/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_888888_256x240.png
deleted file mode 100644
index 6d02426..0000000
Binary files a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_888888_256x240.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_cd0a0a_256x240.png
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_cd0a0a_256x240.png b/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_cd0a0a_256x240.png
deleted file mode 100644
index 2ab019b..0000000
Binary files a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_cd0a0a_256x240.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_f6cf3b_256x240.png
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_f6cf3b_256x240.png b/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_f6cf3b_256x240.png
deleted file mode 100644
index c986935..0000000
Binary files a/contrib/views/slider/src/main/resources/ui/app/assets/img/jquery-ui-bootstrap/ui-icons_f6cf3b_256x240.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/index.html
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/index.html b/contrib/views/slider/src/main/resources/ui/app/assets/index.html
deleted file mode 100755
index 0094188..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/index.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!--
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
--->
-
-<!DOCTYPE html>
-<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
-<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
-<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
-<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <title>Ember Starter Kit</title>
-    <meta name="description" content="">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-
-    <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
-
-    <link rel="stylesheet" href="./stylesheets/app.css">
-    <script src="./javascripts/modernizr-2.6.2.min.js"></script>
-  </head>
-  <body>
-    <!--[if lt IE 7]>
-      <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
-    <![endif]-->
-
-    <script src="./javascripts/vendor.js"></script>
-    <script src="./javascripts/app.js"></script>
-    <script>require('initialize');</script>
-
-  </body>
-</html>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/ember-qunit.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/ember-qunit.js b/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/ember-qunit.js
deleted file mode 100644
index f79e770..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/ember-qunit.js
+++ /dev/null
@@ -1,266 +0,0 @@
-!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.emq=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
-"use strict";
-var testResolver = _dereq_("./test-resolver")["default"] || _dereq_("./test-resolver");
-var Ember = window.Ember["default"] || window.Ember;
-
-exports["default"] = function isolatedContainer(fullNames) {
-  var resolver = testResolver.get();
-  var container = new Ember.Container();
-  container.optionsForType('component', { singleton: false });
-  container.optionsForType('view', { singleton: false });
-  container.optionsForType('template', { instantiate: false });
-  container.optionsForType('helper', { instantiate: false });
-  container.register('component-lookup:main', Ember.ComponentLookup);
-  for (var i = fullNames.length; i > 0; i--) {
-    var fullName = fullNames[i - 1];
-    container.register(fullName, resolver.resolve(fullName));
-  }
-  return container;
-}
-},{"./test-resolver":7}],2:[function(_dereq_,module,exports){
-"use strict";
-var Ember = window.Ember["default"] || window.Ember;
-var isolatedContainer = _dereq_("./isolated-container")["default"] || _dereq_("./isolated-container");
-var moduleFor = _dereq_("./module-for")["default"] || _dereq_("./module-for");
-var moduleForComponent = _dereq_("./module-for-component")["default"] || _dereq_("./module-for-component");
-var moduleForModel = _dereq_("./module-for-model")["default"] || _dereq_("./module-for-model");
-var test = _dereq_("./test")["default"] || _dereq_("./test");
-var testResolver = _dereq_("./test-resolver")["default"] || _dereq_("./test-resolver");
-
-Ember.testing = true;
-
-function setResolver(resolver) {
-  testResolver.set(resolver);
-}
-
-function globalize() {
-  window.moduleFor = moduleFor;
-  window.moduleForComponent = moduleForComponent;
-  window.moduleForModel = moduleForModel;
-  window.test = test;
-  window.setResolver = setResolver;
-}
-
-exports.globalize = globalize;
-exports.moduleFor = moduleFor;
-exports.moduleForComponent = moduleForComponent;
-exports.moduleForModel = moduleForModel;
-exports.test = test;
-exports.setResolver = setResolver;
-},{"./isolated-container":1,"./module-for":5,"./module-for-component":3,"./module-for-model":4,"./test":8,"./test-resolver":7}],3:[function(_dereq_,module,exports){
-"use strict";
-var testResolver = _dereq_("./test-resolver")["default"] || _dereq_("./test-resolver");
-var moduleFor = _dereq_("./module-for")["default"] || _dereq_("./module-for");
-var Ember = window.Ember["default"] || window.Ember;
-
-exports["default"] = function moduleForComponent(name, description, callbacks) {
-  var resolver = testResolver.get();
-
-  moduleFor('component:' + name, description, callbacks, function(container, context, defaultSubject) {
-    var layoutName = 'template:components/' + name;
-
-    var layout = resolver.resolve(layoutName);
-
-    if (layout) {
-      container.register(layoutName, layout);
-      container.injection('component:' + name, 'layout', layoutName);
-    }
-
-    context.dispatcher = Ember.EventDispatcher.create();
-    context.dispatcher.setup({}, '#ember-testing');
-
-    context.__setup_properties__.append = function(selector) {
-      var containerView = Ember.ContainerView.create({container: container});
-      var view = Ember.run(function(){
-        var subject = context.subject();
-        containerView.pushObject(subject);
-        // TODO: destory this somewhere
-        containerView.appendTo('#ember-testing');
-        return subject;
-      });
-
-      return view.$();
-    };
-    context.__setup_properties__.$ = context.__setup_properties__.append;
-  });
-}
-},{"./module-for":5,"./test-resolver":7}],4:[function(_dereq_,module,exports){
-"use strict";
-var moduleFor = _dereq_("./module-for")["default"] || _dereq_("./module-for");
-var Ember = window.Ember["default"] || window.Ember;
-
-exports["default"] = function moduleForModel(name, description, callbacks) {
-  moduleFor('model:' + name, description, callbacks, function(container, context, defaultSubject) {
-    if (DS._setupContainer) {
-      DS._setupContainer(container);
-    } else {
-      container.register('store:main', DS.Store);
-    }
-
-    var adapterFactory = container.lookupFactory('adapter:application');
-    if (!adapterFactory) {
-      container.register('adapter:application', DS.FixtureAdapter);
-    }
-
-    context.__setup_properties__.store = function(){
-      return container.lookup('store:main');
-    };
-
-    if (context.__setup_properties__.subject === defaultSubject) {
-      context.__setup_properties__.subject = function(options) {
-        return Ember.run(function() {
-          return container.lookup('store:main').createRecord(name, options);
-        });
-      };
-    }
-  });
-}
-},{"./module-for":5}],5:[function(_dereq_,module,exports){
-"use strict";
-var Ember = window.Ember["default"] || window.Ember;
-//import QUnit from 'qunit'; // Assumed global in runner
-var testContext = _dereq_("./test-context")["default"] || _dereq_("./test-context");
-var isolatedContainer = _dereq_("./isolated-container")["default"] || _dereq_("./isolated-container");
-
-exports["default"] = function moduleFor(fullName, description, callbacks, delegate) {
-  var container;
-  var context;
-  
-  var _callbacks = {
-    setup: function(){
-      callbacks = callbacks || { };
-
-      var needs = [fullName].concat(callbacks.needs || []);
-      container = isolatedContainer(needs);
-
-      callbacks.subject   = callbacks.subject || defaultSubject;
-
-      callbacks.setup     = callbacks.setup    || function() { };
-      callbacks.teardown  = callbacks.teardown || function() { };
-      
-      function factory() {
-        return container.lookupFactory(fullName);
-      }
-      
-      testContext.set({
-        container:            container,
-        factory:              factory,
-        dispatcher:           null,
-        __setup_properties__: callbacks
-      });
-      
-      context = testContext.get();
-
-      if (delegate) {
-        delegate(container, context, defaultSubject);
-      }
-      
-      if (Ember.$('#ember-testing').length === 0) {
-        Ember.$('<div id="ember-testing"/>').appendTo(document.body);
-      }
-      
-      buildContextVariables(context);
-      callbacks.setup.call(context, container);
-    },
-
-    teardown: function(){
-      Ember.run(function(){
-        container.destroy();
-        
-        if (context.dispatcher) {
-          context.dispatcher.destroy();
-        }
-      });
-      
-      callbacks.teardown(container);
-      Ember.$('#ember-testing').empty();
-    }
-  };
-
-  QUnit.module(description || fullName, _callbacks);
-}
-
-function defaultSubject(options, factory) {
-  return factory.create(options);
-}
-
-// allow arbitrary named factories, like rspec let
-function buildContextVariables(context) {
-  var cache     = { };
-  var callbacks = context.__setup_properties__;
-  var container = context.container;
-  var factory   = context.factory;
-    
-  Ember.keys(callbacks).filter(function(key){
-    // ignore the default setup/teardown keys
-    return key !== 'setup' && key !== 'teardown';
-  }).forEach(function(key){
-    context[key] = function(options) {
-      if (cache[key]) { return cache[key]; }
-
-      var result = callbacks[key](options, factory(), container);
-      cache[key] = result;
-      return result;
-    };
-  });
-}
-},{"./isolated-container":1,"./test-context":6}],6:[function(_dereq_,module,exports){
-"use strict";
-var __test_context__;
-
-function set(context) {
-  __test_context__ = context;
-}
-
-exports.set = set;function get() {
-  return __test_context__;
-}
-
-exports.get = get;
-},{}],7:[function(_dereq_,module,exports){
-"use strict";
-var __resolver__;
-
-function set(resolver) {
-  __resolver__ = resolver;
-}
-
-exports.set = set;function get() {
-  if (__resolver__ == null) throw new Error('you must set a resolver with `testResolver.set(resolver)`');
-  return __resolver__;
-}
-
-exports.get = get;
-},{}],8:[function(_dereq_,module,exports){
-"use strict";
-var Ember = window.Ember["default"] || window.Ember;
-//import QUnit from 'qunit'; // Assumed global in runner
-var testContext = _dereq_("./test-context")["default"] || _dereq_("./test-context");
-
-function resetViews() {
-  Ember.View.views = {};
-}
-
-exports["default"] = function test(testName, callback) {
-
-  function wrapper() {
-    var context = testContext.get();
-    
-    resetViews();
-    var result = callback.call(context);
-
-    function failTestOnPromiseRejection(reason) {
-      ok(false, reason);
-    }
-
-    Ember.run(function(){
-      stop();
-      Ember.RSVP.Promise.cast(result)['catch'](failTestOnPromiseRejection)['finally'](start);
-    });
-  }
-
-  QUnit.test(testName, wrapper);
-}
-},{"./test-context":6}]},{},[2])
-(2)
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/jquery.mockjax.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/jquery.mockjax.js b/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/jquery.mockjax.js
deleted file mode 100644
index b551156..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/jquery.mockjax.js
+++ /dev/null
@@ -1,692 +0,0 @@
-/*!
- * MockJax - jQuery Plugin to Mock Ajax requests
- *
- * Version:  1.6.0
- * Released:
- * Home:   https://github.com/jakerella/jquery-mockjax
- * Author:   Jonathan Sharp (http://jdsharp.com)
- * License:  MIT,GPL
- *
- * Copyright (c) 2014 appendTo, Jordan Kasper
- * NOTE: This repository was taken over by Jordan Kasper (@jakerella) October, 2014
- *
- * Dual licensed under the MIT or GPL licenses.
- * http://opensource.org/licenses/MIT OR http://www.gnu.org/licenses/gpl-2.0.html
- */
-(function($) {
-  var _ajax = $.ajax,
-    mockHandlers = [],
-    mockedAjaxCalls = [],
-    unmockedAjaxCalls = [],
-    CALLBACK_REGEX = /=\?(&|$)/,
-    jsc = (new Date()).getTime();
-
-
-  // Parse the given XML string.
-  function parseXML(xml) {
-    if ( window.DOMParser == undefined && window.ActiveXObject ) {
-      DOMParser = function() { };
-      DOMParser.prototype.parseFromString = function( xmlString ) {
-        var doc = new ActiveXObject('Microsoft.XMLDOM');
-        doc.async = 'false';
-        doc.loadXML( xmlString );
-        return doc;
-      };
-    }
-
-    try {
-      var xmlDoc = ( new DOMParser() ).parseFromString( xml, 'text/xml' );
-      if ( $.isXMLDoc( xmlDoc ) ) {
-        var err = $('parsererror', xmlDoc);
-        if ( err.length == 1 ) {
-          throw new Error('Error: ' + $(xmlDoc).text() );
-        }
-      } else {
-        throw new Error('Unable to parse XML');
-      }
-      return xmlDoc;
-    } catch( e ) {
-      var msg = ( e.name == undefined ? e : e.name + ': ' + e.message );
-      $(document).trigger('xmlParseError', [ msg ]);
-      return undefined;
-    }
-  }
-
-  // Check if the data field on the mock handler and the request match. This
-  // can be used to restrict a mock handler to being used only when a certain
-  // set of data is passed to it.
-  function isMockDataEqual( mock, live ) {
-    var identical = true;
-    // Test for situations where the data is a querystring (not an object)
-    if (typeof live === 'string') {
-      // Querystring may be a regex
-      return $.isFunction( mock.test ) ? mock.test(live) : mock == live;
-    }
-    $.each(mock, function(k) {
-      if ( live[k] === undefined ) {
-        identical = false;
-        return identical;
-      } else {
-        if ( typeof live[k] === 'object' && live[k] !== null ) {
-          if ( identical && $.isArray( live[k] ) ) {
-            identical = $.isArray( mock[k] ) && live[k].length === mock[k].length;
-          }
-          identical = identical && isMockDataEqual(mock[k], live[k]);
-        } else {
-          if ( mock[k] && $.isFunction( mock[k].test ) ) {
-            identical = identical && mock[k].test(live[k]);
-          } else {
-            identical = identical && ( mock[k] == live[k] );
-          }
-        }
-      }
-    });
-
-    return identical;
-  }
-
-  // See if a mock handler property matches the default settings
-  function isDefaultSetting(handler, property) {
-    return handler[property] === $.mockjaxSettings[property];
-  }
-
-  // Check the given handler should mock the given request
-  function getMockForRequest( handler, requestSettings ) {
-    // If the mock was registered with a function, let the function decide if we
-    // want to mock this request
-    if ( $.isFunction(handler) ) {
-      return handler( requestSettings );
-    }
-
-    // Inspect the URL of the request and check if the mock handler's url
-    // matches the url for this ajax request
-    if ( $.isFunction(handler.url.test) ) {
-      // The user provided a regex for the url, test it
-      if ( !handler.url.test( requestSettings.url ) ) {
-        return null;
-      }
-    } else {
-      // Look for a simple wildcard '*' or a direct URL match
-      var star = handler.url.indexOf('*');
-      if (handler.url !== requestSettings.url && star === -1 ||
-        !new RegExp(handler.url.replace(/[-[\]{}()+?.,\\^$|#\s]/g, "\\$&").replace(/\*/g, '.+')).test(requestSettings.url)) {
-        return null;
-      }
-    }
-
-    // Inspect the data submitted in the request (either POST body or GET query string)
-    if ( handler.data ) {
-      if ( ! requestSettings.data || !isMockDataEqual(handler.data, requestSettings.data) ) {
-        // They're not identical, do not mock this request
-        return null;
-      }
-    }
-    // Inspect the request type
-    if ( handler && handler.type &&
-      handler.type.toLowerCase() != requestSettings.type.toLowerCase() ) {
-      // The request type doesn't match (GET vs. POST)
-      return null;
-    }
-
-    return handler;
-  }
-
-  function parseResponseTimeOpt(responseTime) {
-    if ($.isArray(responseTime)) {
-      var min = responseTime[0];
-      var max = responseTime[1];
-      return (typeof min === 'number' && typeof max === 'number') ? Math.floor(Math.random() * (max - min)) + min : null;
-    } else {
-      return (typeof responseTime === 'number') ? responseTime: null;
-    }
-  }
-
-  // Process the xhr objects send operation
-  function _xhrSend(mockHandler, requestSettings, origSettings) {
-
-    // This is a substitute for < 1.4 which lacks $.proxy
-    var process = (function(that) {
-      return function() {
-        return (function() {
-          // The request has returned
-          this.status     = mockHandler.status;
-          this.statusText = mockHandler.statusText;
-          this.readyState	= 1;
-
-          var finishRequest = function () {
-            this.readyState	= 4;
-
-            var onReady;
-            // Copy over our mock to our xhr object before passing control back to
-            // jQuery's onreadystatechange callback
-            if ( requestSettings.dataType == 'json' && ( typeof mockHandler.responseText == 'object' ) ) {
-              this.responseText = JSON.stringify(mockHandler.responseText);
-            } else if ( requestSettings.dataType == 'xml' ) {
-              if ( typeof mockHandler.responseXML == 'string' ) {
-                this.responseXML = parseXML(mockHandler.responseXML);
-                //in jQuery 1.9.1+, responseXML is processed differently and relies on responseText
-                this.responseText = mockHandler.responseXML;
-              } else {
-                this.responseXML = mockHandler.responseXML;
-              }
-            } else if (typeof mockHandler.responseText === 'object' && mockHandler.responseText !== null) {
-              // since jQuery 1.9 responseText type has to match contentType
-              mockHandler.contentType = 'application/json';
-              this.responseText = JSON.stringify(mockHandler.responseText);
-            } else {
-              this.responseText = mockHandler.responseText;
-            }
-            if( typeof mockHandler.status == 'number' || typeof mockHandler.status == 'string' ) {
-              this.status = mockHandler.status;
-            }
-            if( typeof mockHandler.statusText === "string") {
-              this.statusText = mockHandler.statusText;
-            }
-            // jQuery 2.0 renamed onreadystatechange to onload
-            onReady = this.onreadystatechange || this.onload;
-
-            // jQuery < 1.4 doesn't have onreadystate change for xhr
-            if ( $.isFunction( onReady ) ) {
-              if( mockHandler.isTimeout) {
-                this.status = -1;
-              }
-              onReady.call( this, mockHandler.isTimeout ? 'timeout' : undefined );
-            } else if ( mockHandler.isTimeout ) {
-              // Fix for 1.3.2 timeout to keep success from firing.
-              this.status = -1;
-            }
-          };
-
-          // We have an executable function, call it to give
-          // the mock handler a chance to update it's data
-          if ( $.isFunction(mockHandler.response) ) {
-            // Wait for it to finish
-            if ( mockHandler.response.length === 2 ) {
-              mockHandler.response(origSettings, function () {
-                finishRequest.call(that);
-              });
-              return;
-            } else {
-              mockHandler.response(origSettings);
-            }
-          }
-
-          finishRequest.call(that);
-        }).apply(that);
-      };
-    })(this);
-
-    if ( mockHandler.proxy ) {
-      // We're proxying this request and loading in an external file instead
-      _ajax({
-        global: false,
-        url: mockHandler.proxy,
-        type: mockHandler.proxyType,
-        data: mockHandler.data,
-        dataType: requestSettings.dataType === "script" ? "text/plain" : requestSettings.dataType,
-        complete: function(xhr) {
-          mockHandler.responseXML = xhr.responseXML;
-          mockHandler.responseText = xhr.responseText;
-          // Don't override the handler status/statusText if it's specified by the config
-          if (isDefaultSetting(mockHandler, 'status')) {
-            mockHandler.status = xhr.status;
-          }
-          if (isDefaultSetting(mockHandler, 'statusText')) {
-            mockHandler.statusText = xhr.statusText;
-          }
-          this.responseTimer = setTimeout(process, parseResponseTimeOpt(mockHandler.responseTime) || 0);
-        }
-      });
-    } else {
-      // type == 'POST' || 'GET' || 'DELETE'
-      if ( requestSettings.async === false ) {
-        // TODO: Blocking delay
-        process();
-      } else {
-        this.responseTimer = setTimeout(process, parseResponseTimeOpt(mockHandler.responseTime) || 50);
-      }
-    }
-  }
-
-  // Construct a mocked XHR Object
-  function xhr(mockHandler, requestSettings, origSettings, origHandler) {
-    // Extend with our default mockjax settings
-    mockHandler = $.extend(true, {}, $.mockjaxSettings, mockHandler);
-
-    if (typeof mockHandler.headers === 'undefined') {
-      mockHandler.headers = {};
-    }
-    if (typeof requestSettings.headers === 'undefined') {
-      requestSettings.headers = {};
-    }
-    if ( mockHandler.contentType ) {
-      mockHandler.headers['content-type'] = mockHandler.contentType;
-    }
-
-    return {
-      status: mockHandler.status,
-      statusText: mockHandler.statusText,
-      readyState: 1,
-      open: function() { },
-      send: function() {
-        origHandler.fired = true;
-        _xhrSend.call(this, mockHandler, requestSettings, origSettings);
-      },
-      abort: function() {
-        clearTimeout(this.responseTimer);
-      },
-      setRequestHeader: function(header, value) {
-        requestSettings.headers[header] = value;
-      },
-      getResponseHeader: function(header) {
-        // 'Last-modified', 'Etag', 'content-type' are all checked by jQuery
-        if ( mockHandler.headers && mockHandler.headers[header] ) {
-          // Return arbitrary headers
-          return mockHandler.headers[header];
-        } else if ( header.toLowerCase() == 'last-modified' ) {
-          return mockHandler.lastModified || (new Date()).toString();
-        } else if ( header.toLowerCase() == 'etag' ) {
-          return mockHandler.etag || '';
-        } else if ( header.toLowerCase() == 'content-type' ) {
-          return mockHandler.contentType || 'text/plain';
-        }
-      },
-      getAllResponseHeaders: function() {
-        var headers = '';
-        // since jQuery 1.9 responseText type has to match contentType
-        if (mockHandler.contentType) {
-          mockHandler.headers['Content-Type'] = mockHandler.contentType;
-        }
-        $.each(mockHandler.headers, function(k, v) {
-          headers += k + ': ' + v + "\n";
-        });
-        return headers;
-      }
-    };
-  }
-
-  // Process a JSONP mock request.
-  function processJsonpMock( requestSettings, mockHandler, origSettings ) {
-    // Handle JSONP Parameter Callbacks, we need to replicate some of the jQuery core here
-    // because there isn't an easy hook for the cross domain script tag of jsonp
-
-    processJsonpUrl( requestSettings );
-
-    requestSettings.dataType = "json";
-    if(requestSettings.data && CALLBACK_REGEX.test(requestSettings.data) || CALLBACK_REGEX.test(requestSettings.url)) {
-      createJsonpCallback(requestSettings, mockHandler, origSettings);
-
-      // We need to make sure
-      // that a JSONP style response is executed properly
-
-      var rurl = /^(\w+:)?\/\/([^\/?#]+)/,
-        parts = rurl.exec( requestSettings.url ),
-        remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host);
-
-      requestSettings.dataType = "script";
-      if(requestSettings.type.toUpperCase() === "GET" && remote ) {
-        var newMockReturn = processJsonpRequest( requestSettings, mockHandler, origSettings );
-
-        // Check if we are supposed to return a Deferred back to the mock call, or just
-        // signal success
-        if(newMockReturn) {
-          return newMockReturn;
-        } else {
-          return true;
-        }
-      }
-    }
-    return null;
-  }
-
-  // Append the required callback parameter to the end of the request URL, for a JSONP request
-  function processJsonpUrl( requestSettings ) {
-    if ( requestSettings.type.toUpperCase() === "GET" ) {
-      if ( !CALLBACK_REGEX.test( requestSettings.url ) ) {
-        requestSettings.url += (/\?/.test( requestSettings.url ) ? "&" : "?") +
-          (requestSettings.jsonp || "callback") + "=?";
-      }
-    } else if ( !requestSettings.data || !CALLBACK_REGEX.test(requestSettings.data) ) {
-      requestSettings.data = (requestSettings.data ? requestSettings.data + "&" : "") + (requestSettings.jsonp || "callback") + "=?";
-    }
-  }
-
-  // Process a JSONP request by evaluating the mocked response text
-  function processJsonpRequest( requestSettings, mockHandler, origSettings ) {
-    // Synthesize the mock request for adding a script tag
-    var callbackContext = origSettings && origSettings.context || requestSettings,
-      newMock = null;
-
-
-    // If the response handler on the moock is a function, call it
-    if ( mockHandler.response && $.isFunction(mockHandler.response) ) {
-      mockHandler.response(origSettings);
-    } else {
-
-      // Evaluate the responseText javascript in a global context
-      if( typeof mockHandler.responseText === 'object' ) {
-        $.globalEval( '(' + JSON.stringify( mockHandler.responseText ) + ')');
-      } else {
-        $.globalEval( '(' + mockHandler.responseText + ')');
-      }
-    }
-
-    // Successful response
-    setTimeout(function() {
-      jsonpSuccess( requestSettings, callbackContext, mockHandler );
-      jsonpComplete( requestSettings, callbackContext, mockHandler );
-    }, parseResponseTimeOpt(mockHandler.responseTime) || 0);
-
-    // If we are running under jQuery 1.5+, return a deferred object
-    if($.Deferred){
-      newMock = new $.Deferred();
-      if(typeof mockHandler.responseText == "object"){
-        newMock.resolveWith( callbackContext, [mockHandler.responseText] );
-      }
-      else{
-        newMock.resolveWith( callbackContext, [$.parseJSON( mockHandler.responseText )] );
-      }
-    }
-    return newMock;
-  }
-
-
-  // Create the required JSONP callback function for the request
-  function createJsonpCallback( requestSettings, mockHandler, origSettings ) {
-    var callbackContext = origSettings && origSettings.context || requestSettings;
-    var jsonp = requestSettings.jsonpCallback || ("jsonp" + jsc++);
-
-    // Replace the =? sequence both in the query string and the data
-    if ( requestSettings.data ) {
-      requestSettings.data = (requestSettings.data + "").replace(CALLBACK_REGEX, "=" + jsonp + "$1");
-    }
-
-    requestSettings.url = requestSettings.url.replace(CALLBACK_REGEX, "=" + jsonp + "$1");
-
-
-    // Handle JSONP-style loading
-    window[ jsonp ] = window[ jsonp ] || function( tmp ) {
-      data = tmp;
-      jsonpSuccess( requestSettings, callbackContext, mockHandler );
-      jsonpComplete( requestSettings, callbackContext, mockHandler );
-      // Garbage collect
-      window[ jsonp ] = undefined;
-
-      try {
-        delete window[ jsonp ];
-      } catch(e) {}
-
-      if ( head ) {
-        head.removeChild( script );
-      }
-    };
-  }
-
-  // The JSONP request was successful
-  function jsonpSuccess(requestSettings, callbackContext, mockHandler) {
-    // If a local callback was specified, fire it and pass it the data
-    if ( requestSettings.success ) {
-      requestSettings.success.call( callbackContext, mockHandler.responseText || "", status, {} );
-    }
-
-    // Fire the global callback
-    if ( requestSettings.global ) {
-      (requestSettings.context ? $(requestSettings.context) : $.event).trigger("ajaxSuccess", [{}, requestSettings]);
-    }
-  }
-
-  // The JSONP request was completed
-  function jsonpComplete(requestSettings, callbackContext) {
-    // Process result
-    if ( requestSettings.complete ) {
-      requestSettings.complete.call( callbackContext, {} , status );
-    }
-
-    // The request was completed
-    if ( requestSettings.global ) {
-      (requestSettings.context ? $(requestSettings.context) : $.event).trigger("ajaxComplete", [{}, requestSettings]);
-    }
-
-    // Handle the global AJAX counter
-    if ( requestSettings.global && ! --$.active ) {
-      $.event.trigger( "ajaxStop" );
-    }
-  }
-
-
-  // The core $.ajax replacement.
-  function handleAjax( url, origSettings ) {
-    var mockRequest, requestSettings, mockHandler, overrideCallback;
-
-    // If url is an object, simulate pre-1.5 signature
-    if ( typeof url === "object" ) {
-      origSettings = url;
-      url = undefined;
-    } else {
-      // work around to support 1.5 signature
-      origSettings = origSettings || {};
-      origSettings.url = url;
-    }
-
-    // Extend the original settings for the request
-    requestSettings = $.extend(true, {}, $.ajaxSettings, origSettings);
-
-    // Generic function to override callback methods for use with
-    // callback options (onAfterSuccess, onAfterError, onAfterComplete)
-    overrideCallback = function(action, mockHandler) {
-      var origHandler = origSettings[action.toLowerCase()];
-      return function() {
-        if ( $.isFunction(origHandler) ) {
-          origHandler.apply(this, [].slice.call(arguments));
-        }
-        mockHandler['onAfter' + action]();
-      };
-    };
-
-    // Iterate over our mock handlers (in registration order) until we find
-    // one that is willing to intercept the request
-    for(var k = 0; k < mockHandlers.length; k++) {
-      if ( !mockHandlers[k] ) {
-        continue;
-      }
-
-      mockHandler = getMockForRequest( mockHandlers[k], requestSettings );
-      if(!mockHandler) {
-        // No valid mock found for this request
-        continue;
-      }
-
-      mockedAjaxCalls.push(requestSettings);
-
-      // If logging is enabled, log the mock to the console
-      $.mockjaxSettings.log( mockHandler, requestSettings );
-
-
-      if ( requestSettings.dataType && requestSettings.dataType.toUpperCase() === 'JSONP' ) {
-        if ((mockRequest = processJsonpMock( requestSettings, mockHandler, origSettings ))) {
-          // This mock will handle the JSONP request
-          return mockRequest;
-        }
-      }
-
-
-      // Removed to fix #54 - keep the mocking data object intact
-      //mockHandler.data = requestSettings.data;
-
-      mockHandler.cache = requestSettings.cache;
-      mockHandler.timeout = requestSettings.timeout;
-      mockHandler.global = requestSettings.global;
-
-      // In the case of a timeout, we just need to ensure
-      // an actual jQuery timeout (That is, our reponse won't)
-      // return faster than the timeout setting.
-      if ( mockHandler.isTimeout ) {
-        if ( mockHandler.responseTime > 1 ) {
-          origSettings.timeout = mockHandler.responseTime - 1;
-        } else {
-          mockHandler.responseTime = 2;
-          origSettings.timeout = 1;
-        }
-        mockHandler.isTimeout = false;
-      }
-
-      // Set up onAfter[X] callback functions
-      if ( $.isFunction( mockHandler.onAfterSuccess ) ) {
-        origSettings.success = overrideCallback('Success', mockHandler);
-      }
-      if ( $.isFunction( mockHandler.onAfterError ) ) {
-        origSettings.error = overrideCallback('Error', mockHandler);
-      }
-      if ( $.isFunction( mockHandler.onAfterComplete ) ) {
-        origSettings.complete = overrideCallback('Complete', mockHandler);
-      }
-
-      copyUrlParameters(mockHandler, origSettings);
-
-      (function(mockHandler, requestSettings, origSettings, origHandler) {
-
-        mockRequest = _ajax.call($, $.extend(true, {}, origSettings, {
-          // Mock the XHR object
-          xhr: function() { return xhr( mockHandler, requestSettings, origSettings, origHandler ); }
-        }));
-      })(mockHandler, requestSettings, origSettings, mockHandlers[k]);
-
-      return mockRequest;
-    }
-
-    // We don't have a mock request
-    unmockedAjaxCalls.push(origSettings);
-    if($.mockjaxSettings.throwUnmocked === true) {
-      throw new Error('AJAX not mocked: ' + origSettings.url);
-    }
-    else { // trigger a normal request
-      return _ajax.apply($, [origSettings]);
-    }
-  }
-
-  /**
-   * Copies URL parameter values if they were captured by a regular expression
-   * @param {Object} mockHandler
-   * @param {Object} origSettings
-   */
-  function copyUrlParameters(mockHandler, origSettings) {
-    //parameters aren't captured if the URL isn't a RegExp
-    if (!(mockHandler.url instanceof RegExp)) {
-      return;
-    }
-    //if no URL params were defined on the handler, don't attempt a capture
-    if (!mockHandler.hasOwnProperty('urlParams')) {
-      return;
-    }
-    var captures = mockHandler.url.exec(origSettings.url);
-    //the whole RegExp match is always the first value in the capture results
-    if (captures.length === 1) {
-      return;
-    }
-    captures.shift();
-    //use handler params as keys and capture resuts as values
-    var i = 0,
-      capturesLength = captures.length,
-      paramsLength = mockHandler.urlParams.length,
-    //in case the number of params specified is less than actual captures
-      maxIterations = Math.min(capturesLength, paramsLength),
-      paramValues = {};
-    for (i; i < maxIterations; i++) {
-      var key = mockHandler.urlParams[i];
-      paramValues[key] = captures[i];
-    }
-    origSettings.urlParams = paramValues;
-  }
-
-
-  // Public
-
-  $.extend({
-    ajax: handleAjax
-  });
-
-  $.mockjaxSettings = {
-    //url:        null,
-    //type:       'GET',
-    log:          function( mockHandler, requestSettings ) {
-      if ( mockHandler.logging === false ||
-        ( typeof mockHandler.logging === 'undefined' && $.mockjaxSettings.logging === false ) ) {
-        return;
-      }
-      if ( window.console && console.log ) {
-        var message = 'MOCK ' + requestSettings.type.toUpperCase() + ': ' + requestSettings.url;
-        var request = $.extend({}, requestSettings);
-
-        if (typeof console.log === 'function') {
-          console.log(message, request);
-        } else {
-          try {
-            console.log( message + ' ' + JSON.stringify(request) );
-          } catch (e) {
-            console.log(message);
-          }
-        }
-      }
-    },
-    logging:       true,
-    status:        200,
-    statusText:    "OK",
-    responseTime:  500,
-    isTimeout:     false,
-    throwUnmocked: false,
-    contentType:   'text/plain',
-    response:      '',
-    responseText:  '',
-    responseXML:   '',
-    proxy:         '',
-    proxyType:     'GET',
-
-    lastModified:  null,
-    etag:          '',
-    headers: {
-      etag: 'IJF@H#@923uf8023hFO@I#H#',
-      'content-type' : 'text/plain'
-    }
-  };
-
-  $.mockjax = function(settings) {
-    var i = mockHandlers.length;
-    mockHandlers[i] = settings;
-    return i;
-  };
-  $.mockjax.clear = function(i) {
-    if ( arguments.length == 1 ) {
-      mockHandlers[i] = null;
-    } else {
-      mockHandlers = [];
-    }
-    mockedAjaxCalls = [];
-    unmockedAjaxCalls = [];
-  };
-  // support older, deprecated version
-  $.mockjaxClear = function(i) {
-    window.console && window.console.warn && window.console.warn( 'DEPRECATED: The $.mockjaxClear() method has been deprecated in 1.6.0. Please use $.mockjax.clear() as the older function will be removed soon!' );
-    $.mockjax.clear();
-  };
-  $.mockjax.handler = function(i) {
-    if ( arguments.length == 1 ) {
-      return mockHandlers[i];
-    }
-  };
-  $.mockjax.mockedAjaxCalls = function() {
-    return mockedAjaxCalls;
-  };
-  $.mockjax.unfiredHandlers = function() {
-    var results = [];
-    for (var i=0, len=mockHandlers.length; i<len; i++) {
-      var handler = mockHandlers[i];
-      if (handler !== null && !handler.fired) {
-        results.push(handler);
-      }
-    }
-    return results;
-  };
-  $.mockjax.unmockedAjaxCalls = function() {
-    return unmockedAjaxCalls;
-  };
-})(jQuery);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/modernizr-2.6.2.min.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/modernizr-2.6.2.min.js b/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/modernizr-2.6.2.min.js
deleted file mode 100755
index f65d479..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/modernizr-2.6.2.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Modernizr 2.6.2 (Custom Build) | MIT & BSD
- * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load
- */
-;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a){var e=a[d];if(!G(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d<e;d++)u[c[d]]=c[d]in k;return u.list&&(u.list=!!b.createElement("datalist")&&!!a.HTMLDataListElement),u}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)k.setAttribute("type",f=a[d]),e=k.type!=="text",e&&(k.value=l,k.style.cssText="position:
 absolute;visibility:hidden;",/^range$/.test(f)&&k.style.WebkitAppearance!==c?(g.appendChild(k),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(k,null).WebkitAppearance!=="textfield"&&k.offsetHeight!==0,g.removeChild(k)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=k.checkValidity&&k.checkValidity()===!1:e=k.value!=l)),t[a[d]]=!!e;return t}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var d="2.6.2",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k=b.createElement("input"),l=":)",m={}.toString,n=" -webkit- -moz- -o- -ms- ".split(" "),o="Webkit Moz O ms",p=o.split(" "),q=o.toLowerCase().split(" "),r={svg:"http://www.w3.org/2000/svg"},s={},t={},u={},v=[],w=v.slice,x,y=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["&#173;",'<style id="s',h,'">',a,
 "</style>"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.
 call(a,b)}:C=function(a,b){return b in a&&F(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=funct
 ion(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=fun
 ction(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("
 transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayTy
 pe("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="<svg/>",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L 
 in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},D(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var 
 d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e<g;e++)d.createElement(f[e]);return d}function p(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return r.shivMethods?n(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+l().join().replace(/\w+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(r,b.frag)}function q(a){a||(a=b);var c=m(a);return r.shivCSS&&!f&&!c.hasCSS&&(c.hasCSS=!!k(a,"article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}")),j||p(a,c),a}var c=a.html5||{},d=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,e=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,f,g="_html5shiv",h=0,i={},j;(function(){try{var a=b.create
 Element("a");a.innerHTML="<xyz></xyz>",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){functio
 n d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.load
 er={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,
 i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.
 addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};


[27/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/helpers/ajax.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/helpers/ajax.js b/contrib/views/slider/src/main/resources/ui/app/helpers/ajax.js
deleted file mode 100644
index bfb976d..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/helpers/ajax.js
+++ /dev/null
@@ -1,388 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Config for each ajax-request
- *
- * Fields example:
- *  mock - testMode url
- *  real - real url (without API prefix)
- *  type - request type (also may be defined in the format method)
- *  format - function for processing ajax params after default formatRequest. May be called with one or two parameters (data, opt). Return ajax-params object
- *  schema - basic validation schema (tv4) for response (optional)
- *
- * @type {Object}
- */
-var urls = {
-
-  'slider.getViewParams': {
-    real: '?fields=ViewInstanceInfo',
-    mock: '/data/resource/slider-properties.json',
-    headers: {
-      Accept: "text/plain; charset=utf-8",
-      "Content-Type": "text/plain; charset=utf-8"
-    },
-    schema: {
-      required: ['ViewInstanceInfo'],
-      properties: {
-        ViewInstanceInfo: {
-          required: ['properties', 'description', 'label']
-        }
-      }
-    }
-  },
-
-  'slider.getViewParams.v2': {
-    real: 'resources/status',
-    mock: '/data/resource/slider-properties-2.json',
-    headers: {
-      "Accept": "application/json; charset=utf-8",
-      "Content-Type": "text/plain; charset=utf-8"
-    },
-    schema: {
-      required: ['version', 'validations', 'parameters'],
-      properties: {
-        validations: {
-          type: 'array'
-        },
-        parameters: {
-          type : 'object'
-        }
-      }
-    }
-  },
-
-  'mapper.applicationTypes': {
-    real: 'apptypes?fields=*',
-    mock: '/data/apptypes/all_fields.json',
-    headers: {
-      Accept: "text/plain; charset=utf-8",
-      "Content-Type": "text/plain; charset=utf-8"
-    },
-    schema: {
-      required: ['items'],
-      properties: {
-        items: {
-          type: 'array',
-          items: {
-            required: ['id', 'typeComponents', 'typeConfigs'],
-            properties: {
-              typeConfigs: {
-                type: 'object'
-              },
-              typeComponents: {
-                type: 'array',
-                items: {
-                  required: ['id', 'name', 'category', 'displayName']
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  },
-
-  'mapper.applicationApps': {
-    real: '?fields=apps/*',
-    mock: '/data/apps/apps.json',
-    headers: {
-      Accept: "text/plain; charset=utf-8",
-      "Content-Type": "text/plain; charset=utf-8"
-    },
-    'format': function() {
-      return {
-        timeout: 20000
-      };
-    },
-    schema: {
-      required: ['items'],
-      properties: {
-        items: {
-          type: 'array',
-          items: {
-            required: ['id', 'description', 'diagnostics', 'name', 'user', 'state', 'type', 'components', 'configs'],
-            alerts: {
-              type: 'object',
-              detail: {
-                type: 'array'
-              }
-            }
-          }
-        }
-      }
-    }
-  },
-
-  'mapper.applicationStatus': {
-    real: 'resources/status',
-    mock: '/data/resource/status_true.json'
-  },
-
-  'saveInitialValues': {
-    real: '',
-    mock: '/data/resource/empty_json.json',
-    headers: {
-      "Content-Type": "text/plain; charset=utf-8"
-    },
-    format: function (data) {
-      return {
-        type: 'PUT',
-        data: JSON.stringify(data.data),
-        dataType: 'text'
-      }
-    }
-  },
-
-  'validateAppName': {
-    real: 'apps?validateAppName={name}',
-    mock: '/data/resource/empty_json.json',
-    format: function () {
-      return {
-        dataType: 'text',
-        showErrorPopup: true
-      }
-    }
-  },
-
-  'createNewApp': {
-    real: 'apps',
-    mock: '/data/resource/empty_json.json',
-    headers: {
-      "Content-Type": "text/plain; charset=utf-8"
-    },
-    format: function (data) {
-      return {
-        type: 'POST',
-        data: JSON.stringify(data.data),
-        dataType: 'text',
-        showErrorPopup: true
-      }
-    }
-  },
-
-  'destroyApp': {
-    real: 'apps/{id}',
-    mock: '',
-    format: function () {
-      return {
-        method: 'DELETE',
-        dataType: 'text',
-        showErrorPopup: true
-      }
-    }
-  },
-
-  'changeAppState': {
-    real: 'apps/{id}',
-    mock: '',
-    headers: {
-      "Content-Type": "text/plain; charset=utf-8"
-    },
-    format: function (data) {
-      return {
-        method: 'PUT',
-        data: JSON.stringify(data.data),
-        dataType: 'text',
-        showErrorPopup: true
-      }
-    }
-  },
-  'flexApp': {
-    real: 'apps/{id}',
-    mock: '',
-    headers: {
-      "Content-Type": "text/plain; charset=utf-8"
-    },
-    format: function (data) {
-      return {
-        method: 'PUT',
-        data: JSON.stringify(data.data),
-        dataType: 'text',
-        showErrorPopup: true
-      }
-    }
-  },
-
-  'metrics': {
-    real: 'apps/{id}?fields=metrics/{metric}',
-    mock: '/data/metrics/metric.json',
-    headers: {
-      "Accept": "text/plain; charset=utf-8",
-      "Content-Type": "text/plain; charset=utf-8"
-    }
-  },
-
-  'metrics2': {
-    real: 'apps/{id}/metrics/{metric}',
-    mock: '/data/metrics/metric2.json'
-  },
-
-  'metrics3': {
-    real: 'apps/{id}/metrics/{metric}',
-    mock: '/data/metrics/metric3.json'
-  },
-
-  'metrics4': {
-    real: 'apps/{id}/metrics/{metric}',
-    mock: '/data/metrics/metric4.json'
-  }
-
-};
-/**
- * Replace data-placeholders to its values
- *
- * @param {String} url
- * @param {Object} data
- * @return {String}
- */
-var formatUrl = function (url, data) {
-  if (!url) return null;
-  var keys = url.match(/\{\w+\}/g);
-  keys = (keys === null) ? [] : keys;
-  if (keys) {
-    keys.forEach(function (key) {
-      var raw_key = key.substr(1, key.length - 2);
-      var replace;
-      if (!data || !data[raw_key]) {
-        replace = '';
-      }
-      else {
-        replace = data[raw_key];
-      }
-      url = url.replace(new RegExp(key, 'g'), replace);
-    });
-  }
-  return url;
-};
-
-/**
- * this = object from config
- * @return {Object}
- */
-var formatRequest = function (data) {
-  var opt = {
-    type: this.type || 'GET',
-    dataType: 'json',
-    async: true,
-    headers: this.headers || {Accept: "application/json; charset=utf-8"}
-  };
-  if (App.get('testMode')) {
-    opt.url = formatUrl(this.mock ? this.mock : '', data);
-    opt.type = 'GET';
-  }
-  else {
-    var prefix = App.get('urlPrefix');
-    if (Em.get(data, 'urlPrefix')) {
-      prefix = Em.get(data, 'urlPrefix');
-    }
-    var url = formatUrl(this.real, data);
-    opt.url = prefix + (url ? url : '');
-    if (this.format) {
-      jQuery.extend(opt, this.format(data, opt));
-    }
-  }
-
-  return opt;
-};
-
-/**
- * Wrapper for all ajax requests
- *
- * @type {Object}
- */
-var ajax = Em.Object.extend({
-  /**
-   * Send ajax request
-   *
-   * @param {Object} config
-   * @return {$.ajax} jquery ajax object
-   *
-   * config fields:
-   *  name - url-key in the urls-object *required*
-   *  sender - object that send request (need for proper callback initialization) *required*
-   *  data - object with data for url-format
-   *  beforeSend - method-name for ajax beforeSend response callback
-   *  success - method-name for ajax success response callback
-   *  error - method-name for ajax error response callback
-   *  callback - callback from <code>App.updater.run</code> library
-   */
-  send: function (config) {
-
-    Ember.assert('Ajax sender should be defined!', config.sender);
-    Ember.assert('Invalid config.name provided - ' + config.name, urls[config.name]);
-
-    var opt = {};
-
-    // default parameters
-    var params = {
-      clusterName: App.get('clusterName')
-    };
-
-    if (config.data) {
-      jQuery.extend(params, config.data);
-    }
-
-    opt = formatRequest.call(urls[config.name], params);
-    opt.context = this;
-
-    // object sender should be provided for processing beforeSend, success, error and complete responses
-    opt.beforeSend = function (xhr) {
-      if (config.beforeSend) {
-        config.sender[config.beforeSend](opt, xhr, params);
-      }
-    };
-
-    opt.success = function (data) {
-      console.log("TRACE: The url is: " + opt.url);
-
-      // validate response if needed
-      if (urls[config.name].schema) {
-        var result = tv4.validateMultiple(data, urls[config.name].schema);
-        if (!result.valid) {
-          result.errors.forEach(function (error) {
-            console.warn('Request: ' + config.name, 'WARNING: ', error.message, error.dataPath);
-          });
-        }
-      }
-
-      if (config.success) {
-        config.sender[config.success](data, opt, params);
-      }
-    };
-
-    opt.error = function (request, ajaxOptions, error) {
-      if (config.error) {
-        config.sender[config.error](request, ajaxOptions, error, opt, params);
-      } else if (config.sender.defaultErrorHandler) {
-        config.sender.defaultErrorHandler.call(config.sender, request, opt.url, opt.type, opt.showErrorPopup);
-      }
-    };
-
-    opt.complete = function (xhr, status) {
-      if (config.complete) {
-        config.sender[config.complete](xhr, status);
-      }
-    };
-
-    return $.ajax(opt);
-  }
-
-});
-
-App.ajax = ajax.create({});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/helpers/helper.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/helpers/helper.js b/contrib/views/slider/src/main/resources/ui/app/helpers/helper.js
deleted file mode 100644
index 9986c55..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/helpers/helper.js
+++ /dev/null
@@ -1,169 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-String.prototype.format = function () {
-  var args = arguments;
-  return this.replace(/{(\d+)}/g, function (match, number) {
-    return typeof args[number] != 'undefined' ? args[number] : match;
-  });
-};
-
-/**
- * Return formatted string with inserted spaces before upper case and replaced '_' to spaces
- * Also capitalize first letter
- *
- * Examples:
- * 'apple' => 'Apple'
- * 'apple_banana' => 'Apple banana'
- * 'apple_bananaUranium' => 'Apple banana Uranium'
- */
-String.prototype.humanize = function () {
-  var content = this;
-  return content && (content[0].toUpperCase() + content.slice(1)).replace(/([A-Z])/g, ' $1').replace(/_/g, ' ');
-}
-
-/**
- * Helper function for bound property helper registration
- * @memberof App
- * @method registerBoundHelper
- * @param name {String} name of helper
- * @param view {Em.View} view
- */
-App.registerBoundHelper = function(name, view) {
-  Ember.Handlebars.registerHelper(name, function(property, options) {
-    options.hash.contentBinding = property;
-    return Ember.Handlebars.helpers.view.call(this, view, options);
-  });
-};
-
-/**
- * Return formatted string with inserted <code>wbr</code>-tag after each dot
- *
- * @param {String} content
- *
- * Examples:
- *
- * returns 'apple'
- * {{formatWordBreak 'apple'}}
- *
- * returns 'apple.<wbr />banana'
- * {{formatWordBreak 'apple.banana'}}
- *
- * returns 'apple.<wbr />banana.<wbr />uranium'
- * {{formatWordBreak 'apple.banana.uranium'}}
- */
-App.registerBoundHelper('formatWordBreak', Em.View.extend({
-  tagName: 'span',
-  template: Ember.Handlebars.compile('{{{view.result}}}'),
-  devider:'/',
-
-  /**
-   * @type {string}
-   */
-  result: function() {
-    var d = this.get('devider');
-    var r = new RegExp('\\'+d,"g");
-    return this.get('content') && this.get('content').toString().replace(r, d+'<wbr />');
-  }.property('content')
-}));
-
-/**
- * Return formatted string with inserted spaces before upper case and replaced '_' to spaces
- * Also capitalize first letter
- *
- * @param {String} content
- *
- * Examples:
- *
- * returns 'apple'
- * {{humanize 'Apple'}}
- *
- * returns 'apple_banana'
- * {{humanize 'Apple banana'}}
- *
- * returns 'apple_bananaUranium'
- * {{humanize 'Apple banana Uranium'}}
- */
-App.registerBoundHelper('humanize', Em.View.extend({
-
-  tagName: 'span',
-
-  template: Ember.Handlebars.compile('{{{view.result}}}'),
-
-  /**
-   * @type {string}
-   */
-  result: function() {
-    var content = this.get('content');
-    return content && content.humanize();
-  }.property('content')
-}));
-
-/**
- * Ambari overrides the default date transformer.
- * This is done because of the non-standard data
- * sent. For example Nagios sends date as "12345678".
- * The problem is that it is a String and is represented
- * only in seconds whereas Javascript's Date needs
- * milliseconds representation.
- */
-DS.attr.transforms = {
-  date: {
-    from: function (serialized) {
-      var type = typeof serialized;
-      if (type === 'string') {
-        serialized = parseInt(serialized);
-        type = typeof serialized;
-      }
-      if (type === 'number') {
-        if (!serialized) {  //serialized timestamp = 0;
-          return 0;
-        }
-        // The number could be seconds or milliseconds.
-        // If seconds, then the length is 10
-        // If milliseconds, the length is 13
-        if (serialized.toString().length < 13) {
-          serialized = serialized * 1000;
-        }
-        return new Date(serialized);
-      } else if (serialized === null || serialized === undefined) {
-        // if the value is not present in the data,
-        // return undefined, not null.
-        return serialized;
-      } else {
-        return null;
-      }
-    },
-    to: function (deserialized) {
-      if (deserialized instanceof Date) {
-        return deserialized.getTime();
-      } else {
-        return null;
-      }
-    }
-  }
-};
-/**
- * Allow get translation value used in I18n for attributes that ends with Translation.
- * For example:
- * <code>
- *  {{input name="new" placeholderTranslation="any"}}
- * </code>
- **/
-Em.TextField.reopen(Em.I18n.TranslateableAttributes);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/helpers/string_utils.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/helpers/string_utils.js b/contrib/views/slider/src/main/resources/ui/app/helpers/string_utils.js
deleted file mode 100644
index 9675f49..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/helpers/string_utils.js
+++ /dev/null
@@ -1,163 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-module.exports = {
-
-  pad: function(str, len, pad, dir) {
-
-    var STR_PAD_LEFT = 1;
-    var STR_PAD_RIGHT = 2;
-    var STR_PAD_BOTH = 3;
-
-    if (typeof(len) == "undefined") { len = 0; }
-    if (typeof(pad) == "undefined") { pad = ' '; }
-    if (typeof(dir) == "undefined") { dir = STR_PAD_RIGHT; }
-
-    if (len + 1 >= str.length) {
-
-      switch (dir){
-
-        case STR_PAD_LEFT:
-          str = Array(len + 1 - str.length).join(pad) + str;
-          break;
-
-        case STR_PAD_BOTH:
-          var padlen = len - str.length;
-          var right = Math.ceil((padlen) / 2);
-          var left = padlen - right;
-          str = Array(left+1).join(pad) + str + Array(right+1).join(pad);
-          break;
-
-        default:
-          str = str + Array(len + 1 - str.length).join(pad);
-          break;
-
-      } // switch
-
-    }
-    return str;
-
-  },
-  underScoreToCamelCase: function(name){
-    function replacer(str, p1, p2, offset, s) {
-      return str[1].toUpperCase();
-    }
-    return name.replace(/_\w/g,replacer);
-  },
-
-  /**
-   * Forces given string into upper camel-case representation. The first
-   * character of each word will be capitalized with the rest in lower case.
-   */
-  getCamelCase : function(name) {
-    if (name != null) {
-      return name.toLowerCase().replace(/(\b\w)/g, function(f) {
-        return f.toUpperCase();
-      })
-    }
-    return name;
-  },
-
-  /**
-   * Compare two versions by following rules:
-   * first higher than second then return 1
-   * first lower than second then return -1
-   * first equal to second then return 0
-   * @param first {string}
-   * @param second {string}
-   * @return {number}
-   */
-  compareVersions: function(first, second){
-    if (!(typeof first === 'string' && typeof second === 'string')) {
-      return false;
-    }
-    if (first === '' || second === '') {
-      return false;
-    }
-    var firstNumbers = first.split('.');
-    var secondNumbers = second.split('.');
-    var length = 0;
-    var i = 0;
-    var result = false;
-    if(firstNumbers.length === secondNumbers.length) {
-      length = firstNumbers.length;
-    } else if(firstNumbers.length < secondNumbers.length){
-      length = secondNumbers.length;
-    } else {
-      length = firstNumbers.length;
-    }
-
-    while(i < length && !result){
-      firstNumbers[i] = (firstNumbers[i] === undefined) ? 0 : window.parseInt(firstNumbers[i]);
-      secondNumbers[i] = (secondNumbers[i] === undefined) ? 0 : window.parseInt(secondNumbers[i]);
-      if(firstNumbers[i] > secondNumbers[i]){
-        result = 1;
-        break;
-      } else if(firstNumbers[i] === secondNumbers[i]){
-        result = 0;
-      } else if(firstNumbers[i] < secondNumbers[i]){
-        result = -1;
-        break;
-      }
-      i++;
-    }
-    return result;
-  },
-
-  isSingleLine: function(string){
-    return String(string).trim().indexOf("\n") == -1;
-  },
-  /**
-   * transform array of objects into CSV format content
-   * @param array
-   * @return {Array}
-   */
-  arrayToCSV: function(array){
-    var content = "";
-    array.forEach(function(item){
-      var row = [];
-      for(var i in item){
-        if(item.hasOwnProperty(i)){
-          row.push(item[i]);
-        }
-      }
-      content += row.join(',') + '\n';
-    });
-    return content;
-  },
-
-  /**
-   * Extracts filename from linux/unix path
-   * @param path
-   * @return {string}: filename
-   */
-  getFileFromPath: function(path) {
-    if (!path || typeof path !== 'string') {
-      return '';
-    }
-    return path.replace(/^.*[\/]/, '');
-  },
-
-  getPath: function(path) {
-    if (!path || typeof path !== 'string' || path[0] != '/') {
-      return '';
-    }
-    var last_slash = path.lastIndexOf('/');
-    return (last_slash!=0)?path.substr(0,last_slash):'/';
-  }
-};

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/initialize.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/initialize.js b/contrib/views/slider/src/main/resources/ui/app/initialize.js
deleted file mode 100755
index 03fd52a..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/initialize.js
+++ /dev/null
@@ -1,171 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-window.App = require('config/app');
-
-require('config/router');
-require('config/store');
-require('translations');
-require('mappers/mapper');
-
-App.initializer({
-  name: "preload",
-
-  initialize: function(container, application) {
-    var viewId = 'SLIDER';
-    var viewVersion = '1.0.0';
-    var instanceName = 'SLIDER_1';
-    if (location.pathname != null) {
-      var splits = location.pathname.split('/');
-      if (splits != null && splits.length > 4) {
-        viewId = splits[2];
-        viewVersion = splits[3];
-        instanceName = splits[4];
-      }
-    }
-    
-    application.reopen({
-      /**
-       * Test mode is automatically enabled if running on brunch server
-       * @type {bool}
-       */
-      testMode: (location.port == '3333'),
-
-      /**
-       * @type {string}
-       */
-      name: viewId,
-
-      /**
-       * Slider version
-       * @type {string}
-       */
-      version: viewVersion,
-
-      /**
-       * @type {string}
-       */
-      instance: instanceName,
-
-      /**
-       * @type {string}
-       */
-      label: instanceName,
-
-      /**
-       * @type {string|null}
-       */
-      description: null,
-
-      /**
-       * API url for Slider
-       * Format:
-       *  <code>/api/v1/views/[VIEW_NAME]/versions/[VERSION]/instances/[INSTANCE_NAME]/</code>
-       * @type {string}
-       */
-      urlPrefix: function() {
-        return '/api/v1/views/%@1/versions/%@2/instances/%@3/'.fmt(this.get('name'), this.get('version'), this.get('instance'));
-      }.property('name', 'version', 'instance'),
-
-      /**
-       * Should Slider View be enabled
-       * @type {bool}
-       */
-      viewEnabled: false,
-
-      /**
-       * Should Slider View be disabled
-       * @type {bool}
-       */
-      viewDisabled: Em.computed.not('viewEnabled'),
-
-      /**
-       * List of errors
-       * @type {string[]}
-       */
-      viewErrors: [],
-
-      /**
-       * Host with Metrics Server (AMBARI_METRICS)
-       * @type {string|null}
-       */
-      metricsHost: null,
-
-      /**
-       * Port of Metrics Server (AMBARI_METRICS port)
-       * @type {array|null}
-       */
-      metricsPort: null,
-
-      /**
-       * Last time when mapper ran
-       * @type {null|number}
-       */
-      mapperTime: null,
-
-      /**
-       * Default java_home value for Slider View instance
-       * @type {string|null}
-       */
-      javaHome: null
-
-    });
-    if(!window.QUnit) {
-      var sliderController = application.__container__.lookup('controller:Slider');
-      sliderController.getViewDisplayParameters().done(function() {
-        sliderController.run('initResources');
-      }).fail(function(){
-        // If initial view-listing failed, it might be due to bad previous-configs.
-        // We will initialize '/resources/status' to load configs again, and then
-        // attempt one more time to load view parameters.
-        sliderController.touchViewStatus().done(function() {
-          sliderController.getViewDisplayParameters().done(function() {
-            sliderController.run('initResources');
-          });
-        });
-      });
-      application.ApplicationTypeMapper.load();
-      application.SliderAppsMapper.run('load');
-    }
-  }
-});
-
-// Load all modules in order automatically. Ember likes things to work this
-// way so everything is in the App.* namespace.
-var folderOrder = [
-    'initializers', 'mixins', 'routes', 'models', 'mappers',
-    'views', 'controllers', 'helpers',
-    'templates', 'components'
-  ];
-
-folderOrder.forEach(function(folder) {
-  window.require.list().filter(function(module) {
-    return new RegExp('^' + folder + '/').test(module);
-  }).forEach(function(module) {
-    require(module);
-  });
-});
-
-$.ajaxSetup({
-  cache : false,
-  headers : {
-    "X-Requested-By" : "X-Requested-By"
-  }
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/mappers/application_type.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/mappers/application_type.js b/contrib/views/slider/src/main/resources/ui/app/mappers/application_type.js
deleted file mode 100644
index 9fff2e3..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/mappers/application_type.js
+++ /dev/null
@@ -1,162 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Mapper for <code>App.SliderAppType</code> and <code>App.SliderAppComponent</code> models
- * For nested models:
- * <ul>
- *   <li>
- *     Define property (P1) started with '$' in <code>map</code> (example - $components).
- *   </li>
- *   <li>
- *     Define property componentsMap (P1 without '$' and with suffix 'Map').
- *     It is used as map for nested models
- *   </li>
- *   <li>
- *     Define property componentsParentField (P1 without '$' and with suffix 'ParentField').
- *     It  is used as property in nested model to link it with parent model
- *   </li>
- * </ul>
- * @type {App.Mapper}
- */
-App.ApplicationTypeMapper = App.Mapper.create({
-
-  /**
-   * Map for parsing JSON received from server
-   * Format:
-   *  <code>
-   *    {
-   *      key1: 'path1',
-   *      key2: 'path2',
-   *      key3: 'path3'
-   *    }
-   *  </code>
-   *  Keys - names for properties in App
-   *  Values - pathes in JSON
-   * @type {object}
-   */
-  map: {
-    id: 'id',
-    configs: 'typeConfigs',
-    typeName: 'typeName',
-    typeVersion: 'typeVersion',
-    index: 'id',
-    description: 'typeDescription',
-    version: 'typeVersion',
-    /**
-     * Map array to nested models
-     * Use <code>('$components').replace('$', '') + 'Map'</code> property as map
-     * Use <code>('$components').replace('$', '') + 'Model'</code> property as model to save data
-     */
-    $components: 'typeComponents'
-  },
-
-  /**
-   * Map for <code>App.SliderAppTypeComponent</code>
-   * @type {object}
-   */
-  componentsMap: {
-    id: 'id',
-    name: 'name',
-    displayName: 'displayName',
-    defaultNumInstances: 'instanceCount',
-    defaultYARNMemory: 'yarnMemory',
-    defaultYARNCPU: 'yarnCpuCores',
-    priority: 'priority'
-  },
-
-  /**
-   * Nested model name - <code>App.SliderAppTypeComponent</code>
-   * @type {string}
-   */
-  componentsModel: 'sliderAppTypeComponent',
-
-  /**
-   * Field in <code>App.SliderAppTypeComponent</code> with parent model link
-   * @type {string}
-   */
-  componentsParentField: 'appType',
-
-  /**
-   * Load data from <code>App.urlPrefix + this.urlSuffix</code> one time
-   * @method load
-   * @return {$.ajax}
-   */
-  load: function() {
-    console.log('App.ApplicationTypeMapper loading data');
-    return App.ajax.send({
-      name: 'mapper.applicationTypes',
-      sender: this,
-      success: 'parse'
-    });
-  },
-
-  /**
-   * Parse loaded data according to <code>map</code>
-   * Load <code>App.SliderAppType</code> models
-   * @param {object} data received from server data
-   * @method parse
-   */
-  parse: function(data) {
-    var map = this.get('map'),
-      app_types = [],
-      self = this;
-    data.items.forEach(function(app_type) {
-      var model = {};
-      Ember.keys(map).forEach(function(key) {
-        // Property should be parsed as array of nested models
-        if ('$' == key[0]) {
-          var k = key.replace('$', '');
-          var components = self.parseNested(Ember.get(app_type, map[key]), k, app_type.id);
-          // save nested models and then link them with parent model
-          App.SliderApp.store.pushMany(self.get(k + 'Model'), components);
-          Ember.set(model, k, components.mapProperty('id'));
-        }
-        else {
-          Ember.set(model, key, Ember.getWithDefault(app_type, map[key], ''));
-        }
-      });
-      app_types.pushObject(model);
-    });
-    App.SliderApp.store.pushMany('sliderAppType', app_types);
-  },
-
-  /**
-   * Parse array of objects as list of nested models
-   * @param {object[]} data data to parse
-   * @param {string} k property name
-   * @param {string} parentId parent model's id
-   * @return {object[]} mapped models
-   * @method parseNested
-   */
-  parseNested: function(data, k, parentId) {
-    var models = [],
-      map = this.get(k + 'Map'),
-      parentField = this.get(k + 'ParentField');
-    data.forEach(function(item) {
-      var model = {id: item.id};
-      model[parentField] = parentId; // link to parent model
-      Ember.keys(map).forEach(function(key) {
-        Ember.set(model, key, Ember.getWithDefault(item, map[key], ''));
-      });
-      models.pushObject(model);
-    });
-    return models;
-  }
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/mappers/mapper.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/mappers/mapper.js b/contrib/views/slider/src/main/resources/ui/app/mappers/mapper.js
deleted file mode 100644
index 2f985eb..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/mappers/mapper.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Common mapper-object
- * Extending this object you should implement <code>load</code> and <code>parse</code> methods
- * @type {Ember.Object}
- */
-App.Mapper = Ember.Object.extend({
-
-  /**
-   * Map for parsing JSON received from server
-   * Format:
-   *  <code>
-   *    {
-   *      key1: 'path1',
-   *      key2: 'path2',
-   *      key3: 'path3'
-   *    }
-   *  </code>
-   *  Keys - names for properties in object
-   *  Values - pathes in JSON
-   * @type {object}
-   */
-  map: {},
-
-  /**
-   * Load data from <code>App.urlPrefix + this.urlSuffix</code>
-   * @method load
-   */
-  load: Ember.required(Function),
-
-  /**
-   * Parse loaded data according to <code>map</code>
-   * Set <code>App</code> properties
-   * @param {object} data received data
-   * @method parse
-   */
-  parse: Ember.required(Function)
-
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/mappers/slider_apps_mapper.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/mappers/slider_apps_mapper.js b/contrib/views/slider/src/main/resources/ui/app/mappers/slider_apps_mapper.js
deleted file mode 100644
index 95750ce..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/mappers/slider_apps_mapper.js
+++ /dev/null
@@ -1,292 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Mapper for <code>App.SliderApp</code> and <code>App.QuickLink</code> models
- * @type {App.Mapper}
- */
-App.SliderAppsMapper = App.Mapper.createWithMixins(App.RunPeriodically, {
-
-  /**
-   * List of app state display names
-   */
-  stateMap: {
-    'FROZEN': 'STOPPED',
-    'THAWED': 'RUNNING'
-  },
-
-  /**
-   * @type {bool}
-   */
-  isWarningPopupShown: false,
-
-  /**
-   * @type {bool}
-   */
-  isChained: true,
-  /**
-   * Load data from <code>App.urlPrefix + this.urlSuffix</code> one time
-   * @method load
-   * @return {$.ajax}
-   */
-  load: function () {
-    var self = this;
-    var dfd = $.Deferred();
-
-    App.ajax.send({
-      name: 'mapper.applicationApps',
-      sender: this,
-      success: 'parse'
-    }).fail(function(jqXHR, textStatus){
-        App.__container__.lookup('controller:application').set('hasConfigErrors', true);
-        if (!self.get('isWarningPopupShown')) {
-          var message = textStatus === "timeout" ? "timeout" : jqXHR.responseText;
-          self.set('isWarningPopupShown', true);
-          window.App.__container__.lookup('controller:SliderApps').showUnavailableAppsPopup(message);
-        }
-      }).complete(function(){
-        dfd.resolve();
-      });
-    return dfd.promise();
-  },
-
-  /**
-   * close warning popup if apps became available
-   * @return {*}
-   */
-  closeWarningPopup: function() {
-    if (Bootstrap.ModalManager.get('apps-warning-modal')) {
-      Bootstrap.ModalManager.close('apps-warning-modal');
-    }
-  },
-
-  /**
-   * Parse loaded data
-   * Load <code>App.Alert</code> model
-   * @param {object} data received from server data
-   * @method parse
-   */
-  parseAlerts: function (data) {
-    var alerts = [],
-      appId = data.id;
-
-    if (data.alerts && data.alerts.detail) {
-      data.alerts.detail.forEach(function (alert) {
-        alerts.push({
-          id: appId + alert.description,
-          title: alert.description,
-          serviceName: alert.service_name,
-          status: alert.status,
-          message: alert.output,
-          hostName: alert.host_name,
-          lastTime: alert.status_time,
-          appId: appId,
-          lastCheck: alert.last_status_time
-        });
-      });
-      alerts = alerts.sortBy('title');
-      App.SliderApp.store.pushMany('sliderAppAlert', alerts);
-    }
-    return alerts.mapProperty('id');
-  },
-
-  /**
-   * Parse loaded data
-   * Load <code>App.SliderAppComponent</code> model
-   * @param {object} data received from server data
-   * @method parse
-   */
-  parseComponents: function (data) {
-    var components = [],
-      appId = data.id;
-
-    Object.keys(data.components).forEach(function (key) {
-      var component = data.components[key],
-        activeContainers = Object.keys(component.activeContainers);
-      for (var i = 0; i < component.instanceCount; i++) {
-        components.pushObject(
-          Ember.Object.create({
-            id: appId + component.componentName + i,
-            status: activeContainers[i] ? "Running" : "Stopped",
-            host: activeContainers[i] ? component.activeContainers[activeContainers[i]].host : "",
-            containerId: activeContainers[i] ? component.activeContainers[activeContainers[i]].name : "",
-            componentName: component.componentName,
-            appId: appId
-          })
-        );
-      }
-    });
-    App.SliderApp.store.pushMany('sliderAppComponent', components);
-    return components.mapProperty('id');
-  },
-
-  /**
-   * Parse loaded data
-   * Load <code>App.SliderApp.configs</code> model
-   * @param {object} data received from server data
-   * @method parse
-   */
-  parseConfigs: function (data) {
-    var configs = {};
-    Object.keys(data.configs).forEach(function (key) {
-      configs[key] = data.configs[key];
-    });
-    return configs;
-  },
-
-  /**
-   * Parse loaded data
-   * Load <code>App.QuickLink</code> model
-   * @param {object} data received from server data
-   * @method parse
-   */
-  parseQuickLinks : function(data) {
-    var quickLinks = [],
-      appId = data.id,
-      yarnAppId = appId,
-      index = appId.lastIndexOf('_');
-    if (index > 0) {
-      yarnAppId = appId.substring(0, index + 1);
-      for (var k = (appId.length - index - 1); k < 4; k++) {
-        yarnAppId += '0';
-      }
-      yarnAppId += appId.substring(index + 1);
-    }
-    var yarnUI = "http://"+window.location.hostname+":8088",
-      viewConfigs = App.SliderApp.store.all('sliderConfig');
-    if (!Em.isNone(viewConfigs)) {
-      var viewConfig = viewConfigs.findBy('viewConfigName', 'yarn.rm.webapp.url');
-      if (!Em.isNone(viewConfig)) {
-        yarnUI = 'http://' + viewConfig.get('value');
-      }
-    }
-    quickLinks.push(
-      Ember.Object.create({
-        id: 'YARN application ' + yarnAppId,
-        label: 'YARN application',
-        url: yarnUI + '/cluster/app/application_' + yarnAppId
-      })
-    );
-
-    if(!data.urls){
-      App.SliderApp.store.pushMany('QuickLink', quickLinks);
-      return quickLinks.mapProperty('id');
-    }
-
-    Object.keys(data.urls).forEach(function (key) {
-      quickLinks.push(
-        Ember.Object.create({
-          id: appId+key,
-          label: key,
-          url: data.urls[key]
-        })
-      );
-    });
-    App.SliderApp.store.pushMany('QuickLink', quickLinks);
-    return quickLinks.mapProperty('id');
-  },
-
-  parseObject: function (o) {
-    if (Ember.typeOf(o) !== 'object') return [];
-    return Ember.keys(o).map(function (key) {
-      return {key: key, value: o[key]};
-    });
-  },
-
-  /**
-   * Concatenate <code>supportedMetrics</code> into one string
-   * @param {object} app
-   * @returns {string}
-   * @method parseMetricNames
-   */
-  parseMetricNames : function(app) {
-    if (app.supportedMetrics) {
-      return app.supportedMetrics.join(",");
-    }
-    return "";
-  },
-
-  /**
-   * Parse loaded data
-   * Load <code>App.SliderApp</code> model
-   * @param {object} data received from server data
-   * @method parse
-   */
-  parse: function (data) {
-    var apps = [],
-      self = this,
-      appsToDelete = App.SliderApp.store.all('sliderApp').mapBy('id');
-
-    App.__container__.lookup('controller:application').set('hasConfigErrors', false);
-
-    if (this.get('isWarningPopupShown')) {
-      this.closeWarningPopup();
-      this.set('isWarningPopupShown', false);
-    }
-
-    data.apps.forEach(function (app) {
-      var componentsId = app.components ? self.parseComponents(app) : [],
-        configs = app.configs ? self.parseConfigs(app) : {},
-        quickLinks = self.parseQuickLinks(app),
-        alerts = self.parseAlerts(app),
-        jmx = self.parseObject(app.jmx),
-        metricNames = self.parseMetricNames(app),
-        masterActiveTime = jmx.findProperty('key', 'MasterActiveTime'),
-        masterStartTime = jmx.findProperty('key', 'MasterStartTime');
-      if (masterActiveTime) {
-        masterActiveTime.value = new Date(Date.now() - masterActiveTime.value).getHours() + "h:" + new Date(Date.now() - masterActiveTime.value).getMinutes() + "m";
-      }
-      if (masterStartTime) {
-        masterStartTime.value = (new Date(parseInt(masterStartTime.value)).toUTCString());
-      }
-      apps.push(
-        Ember.Object.create({
-          id: app.id,
-          yarnId: app.yarnId,
-          name: app.name,
-          status: app.state,
-          displayStatus: self.stateMap[app.state] || app.state,
-          user: app.user,
-          started: app.startTime || 0,
-          ended: app.endTime  || 0,
-          appType: app.typeId,
-          diagnostics: app.diagnostics || "-",
-          description: app.description || "-",
-          components: componentsId,
-          quickLinks: quickLinks,
-          alerts: alerts,
-          configs: configs,
-          jmx: jmx,
-          runtimeProperties: app.configs,
-          supportedMetricNames: metricNames
-        })
-      );
-
-      appsToDelete = appsToDelete.without(app.id);
-    });
-    appsToDelete.forEach(function (app) {
-      var appRecord = App.SliderApp.store.getById('sliderApp', app);
-      if (appRecord) {
-        appRecord.deleteRecord();
-      }
-    });
-    apps.forEach(function(app) {
-      App.SliderApp.store.push('sliderApp', app, true);
-    });
-  }
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/mixins/ajax_error_handler.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/mixins/ajax_error_handler.js b/contrib/views/slider/src/main/resources/ui/app/mixins/ajax_error_handler.js
deleted file mode 100644
index 90614b5..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/mixins/ajax_error_handler.js
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Attach default error handler on error of Ajax calls
- * To correct work should be mixed with Controller or View instance
- * Example:
- *  <code>
- *    var obj = Ember.Controller.extend(App.AjaxErrorHandler, {
- *      callToServer: function() {
- *        App.ajax.send(config);
- *      }
- *    });
- *    if ajax config doesn't have error handler then the default hanlder will be established
- *  </code>
- * @type {Ember.Mixin}
- */
-App.AjaxErrorHandler = Ember.Mixin.create({
-  /**
-   * flag to indicate whether popup with ajax already opened to avoid popup overlaying
-   */
-  errorPopupShown: false,
-  /**
-   * defaultErrorHandler function is referred from App.ajax.send function
-   * @jqXHR {jqXHR Object}
-   * @url {string}
-   * @method {String} Http method
-   * @showErrorPopup {boolean}
-   */
-  defaultErrorHandler: function (jqXHR, url, method, showErrorPopup) {
-    var self = this;
-    method = method || 'GET';
-    var context = this.get('isController') ? this : (this.get('isView') && this.get('controller'));
-    try {
-      var json = $.parseJSON(jqXHR.responseText);
-      var message = json.message;
-    } catch (err) {
-    }
-
-    if (!context) {
-      console.warn('WARN: App.AjaxErrorHandler should be used only for views and controllers');
-      return;
-    }
-    if (showErrorPopup && !this.get('errorPopupShown')) {
-      Bootstrap.ModalManager.open(
-        "ajax-error-modal",
-        Em.I18n.t('common.error'),
-        Ember.View.extend({
-          classNames: ['api-error'],
-          templateName: 'common/ajax_error',
-          api: Em.I18n.t('ajax.apiInfo').format(method, url),
-          statusCode: Em.I18n.t('ajax.statusCode').format(jqXHR.status),
-          message: message,
-          showMessage: !!message,
-          willDestroyElement: function () {
-            self.set('errorPopupShown', false);
-          }
-        }),
-        [
-          Ember.Object.create({title: Em.I18n.t('ok'), dismiss: 'modal', type: 'success'})
-        ],
-        context
-      );
-      this.set('errorPopupShown', true);
-    }
-  }
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/mixins/run_periodically.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/mixins/run_periodically.js b/contrib/views/slider/src/main/resources/ui/app/mixins/run_periodically.js
deleted file mode 100644
index 68bfc3f..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/mixins/run_periodically.js
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Allow to run object method periodically and stop it
- * Example:
- *  <code>
- *    var obj = Ember.Object.createWithMixins(App.RunPeriodically, {
- *      method: Ember.K
- *    });
- *    obj.set('interval', 10000); // override default value
- *    obj.loop('method'); // run periodically
- *    obj.stop(); // stop running
- *  </code>
- * @type {Ember.Mixin}
- */
-App.RunPeriodically = Ember.Mixin.create({
-
-  /**
-   * Interval for loop
-   * @type {number}
-   */
-  interval: 5000,
-
-  /**
-   * setTimeout's return value
-   * @type {number}
-   */
-  timer: null,
-
-  /**
-   * flag to indicate whether each call should be chained to previous one
-   * @type {bool}
-   */
-  isChained: false,
-
-  /**
-   * Run <code>methodName</code> periodically with <code>interval</code>
-   * @param {string} methodName method name to run periodically
-   * @param {bool} initRun should methodName be run before setInterval call (default - true)
-   * @method run
-   */
-  run: function(methodName, initRun) {
-    initRun = Em.isNone(initRun) ? true : initRun;
-    var self = this,
-      interval = this.get('interval');
-    Ember.assert('Interval should be numeric and greated than 0', $.isNumeric(interval) && interval > 0);
-    if (initRun) {
-      this[methodName]();
-    }
-
-    if (this.get('isChained')) {
-      this.loop(self, methodName, interval);
-    } else {
-      this.set('timer',
-        setInterval(function () {
-          self[methodName]();
-        }, interval)
-      );
-    }
-  },
-
-  /**
-   * Start chain of calls of <code>methodName</code> with <code>interval</code>
-   * next call made only after previous is finished
-   * callback should return deffered object to run next loop
-   * @param {object} context
-   * @param {string} methodName method name to run periodically
-   * @param {number} interval
-   * @method loop
-   */
-  loop: function (context, methodName, interval) {
-    var self = this;
-    this.set('timer',
-      setTimeout(function () {
-        context[methodName]().done(function () {
-          self.loop(context, methodName, interval);
-        });
-      }, interval)
-    );
-  },
-
-  /**
-   * Stop running <code>timer</code>
-   * @method stop
-   */
-  stop: function() {
-    var timer = this.get('timer');
-    if (!Em.isNone(timer)) {
-      clearTimeout(timer);
-    }
-  }
-
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/mixins/with_panels.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/mixins/with_panels.js b/contrib/views/slider/src/main/resources/ui/app/mixins/with_panels.js
deleted file mode 100644
index 972834f..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/mixins/with_panels.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Mixin for views that use Bootstrap.BsPanelComponent component
- * Add caret for collapsed/expanded panels at the left of panel's title
- * Usage:
- * <code>
- *  App.SomeView = Em.View.extend(App.WithPanels, {
- *    didInsertElement: function() {
- *      this.addCarets();
- *    }
- *  });
- * </code>
- * @type {Em.Mixin}
- */
-App.WithPanels = Ember.Mixin.create({
-
-  /**
-   * Add caret before panel's title and add handlers for expand/collapse events
-   * Set caret-down when panel is expanded
-   * Set caret-right when panel is collapsed
-   * @method addArrows
-   */
-  addCarets: function() {
-    var panel = $('.panel');
-    panel.find('.panel-heading').prepend('<span class="pull-left icon icon-caret-right"></span>');
-    panel.find('.panel-collapse.collapse.in').each(function() {
-      $(this).parent().find('.icon.icon-caret-right:first-child').addClass('icon-caret-down').removeClass('icon-caret-right');
-    });
-    panel.on('hidden.bs.collapse', function (e) {
-      $(e.delegateTarget).find('span.icon').addClass('icon-caret-right').removeClass('icon-caret-down');
-    }).on('shown.bs.collapse', function (e) {
-        $(e.delegateTarget).find('span.icon').addClass('icon-caret-down').removeClass('icon-caret-right');
-      });
-  }
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/models/.gitkeep
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/models/.gitkeep b/contrib/views/slider/src/main/resources/ui/app/models/.gitkeep
deleted file mode 100755
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/models/config_property.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/models/config_property.js b/contrib/views/slider/src/main/resources/ui/app/models/config_property.js
deleted file mode 100644
index 625dfec..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/models/config_property.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-/**
- * Config property
- * @type {object}
- */
-App.ConfigProperty = Em.Object.extend({
-  name: null,
-  value: null,
-  label: "",
-  viewType: null,
-  view: function () {
-    switch (this.get('viewType')) {
-      case 'checkbox':
-        return Em.Checkbox;
-      case 'select':
-        return Em.Select;
-      default:
-        return Em.TextField;
-    }
-  }.property('viewType'),
-  className: function () {
-    return "value-for-" + this.get('label').replace(/\./g, "-");
-  }.property('viewType'),
-  readOnly: false,
-  //used for config with "select" view
-  options: [],
-  //indicate whether it single config or set of configs
-  isSet: false
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/models/host.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/models/host.js b/contrib/views/slider/src/main/resources/ui/app/models/host.js
deleted file mode 100644
index 19269c2..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/models/host.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.Host = DS.Model.extend({
-
-  /**
-   * @type {string}
-   */
-  hostName: DS.attr('string'),
-
-  /**
-   * @type {string}
-   */
-  publicHostName: DS.attr('string')
-
-});
-
-App.Host.FIXTURES = [];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/models/slider_app.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/models/slider_app.js b/contrib/views/slider/src/main/resources/ui/app/models/slider_app.js
deleted file mode 100644
index de31dfc..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/models/slider_app.js
+++ /dev/null
@@ -1,207 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.SliderApp = DS.Model.extend({
-
-  /**
-   * @type {string}
-   */
-  yarnId: DS.attr('string'),
-
-  /**
-   * @type {string}
-   */
-  name: DS.attr('string'),
-
-  /**
-   * @type {status}
-   */
-  status: DS.attr('string'),
-
-  /**
-   * Status before performed action
-   * @type {string}
-   */
-  statusBeforeAction: DS.attr('string'),
-
-  /**
-   * @type {displayStatus}
-   */
-  displayStatus: DS.attr('string'),
-
-  /**
-   * @type {string}
-   */
-  user: DS.attr('string'),
-
-  /**
-   * @type {number}
-   */
-  started: DS.attr('number'),
-
-  /**
-   * @type {boolean}
-   */
-  isActionPerformed: DS.attr('boolean'),
-
-  /**
-   * @type {boolean}
-   */
-  isActionFinished: function() {
-    return this.get('status') != this.get('statusBeforeAction');
-  }.property('statusBeforeAction', 'status'),
-
-  /**
-   * @type {String}
-   */
-
-  startedToLocalTime: function () {
-    var started = this.get('started');
-    return started ? moment(started).format('ddd, DD MMM YYYY, HH:mm:ss Z [GMT]') : '-';
-  }.property('started'),
-
-  /**
-   * @type {number}
-   */
-  ended: DS.attr('number'),
-
-  /**
-   * @type {String}
-   */
-
-  endedToLocalTime: function () {
-    var ended = this.get('ended');
-    return ended ? moment(ended).format('ddd, DD MMM YYYY, HH:mm:ss Z [GMT]') : '-';
-  }.property('ended'),
-
-  /**
-   * @type {App.SliderAppType}
-   */
-  appType: DS.belongsTo('sliderAppType'),
-
-  /**
-   * @type {string}
-   */
-
-  description: DS.attr('string'),
-  /**
-   * @type {string}
-   */
-  diagnostics: DS.attr('string'),
-
-  /**
-   * @type {App.SliderAppComponent[]}
-   */
-  components: DS.hasMany('sliderAppComponent', {async: true}),
-
-  /**
-   * @type {App.QuickLink[]}
-   */
-  quickLinks: DS.hasMany('quickLink', {async: true}),
-
-  /**
-   * @type {App.SliderAppAlert[]}
-   */
-  alerts: DS.hasMany('sliderAppAlert', {async: true}),
-
-  /**
-   * @type {App.TypedProperty[]}
-   */
-  runtimeProperties: DS.hasMany('typedProperty', {async: true}),
-
-  /**
-   * @type {object}
-   * Format:
-   * {
-   *   site-name1: {
-   *      config1: value1,
-   *      config2: value2
-   *      ...
-   *   },
-   *   site-name2: {
-   *      config3: value5,
-   *      config4: value6
-   *      ...
-   *   },
-   *   ...
-   * }
-   */
-  configs: DS.attr('object'),
-
-  jmx: DS.attr('object'),
-
-  supportedMetricNames: DS.attr('string'),
-
-  /**
-   * Config categories, that should be hidden on app page
-   * @type {string[]}
-   */
-  hiddenCategories: [],
-
-  /**
-   * @type {boolean}
-   */
-  doNotShowComponentsAndAlerts: function () {
-    return this.get('status') == "FROZEN" || this.get('status') == "FAILED";
-  }.property('status', 'components', 'alerts'),
-
-  /**
-   * Display metrics only for running apps
-   * Also don't display if metrics don't exist
-   * @type {boolean}
-   */
-  showMetrics: function () {
-    if (!this.get('supportedMetricNames.length')) return false;
-    if (App.get('metricsHost') != null) {
-      return true;
-    }
-    return App.SliderApp.Status.running === this.get('status');
-  }.property('status', 'configs', 'supportedMetricNames'),
-
-  /**
-   * Map object to array
-   * @param {object} o
-   * @returns {{key: string, value: *}[]}
-   */
-  mapObject: function (o) {
-    if (Ember.typeOf(o) !== 'object') return [];
-    return Ember.keys(o).map(function (key) {
-      return {
-        key: key,
-        value: o[key],
-        isMultiline: o[key].indexOf("\n") !== -1 || o[key].length > 100
-      };
-    });
-  }
-
-});
-
-App.SliderApp.FIXTURES = [];
-
-App.SliderApp.Status = {
-  accepted: "ACCEPTED",
-  failed: "FAILED",
-  finished: "FINISHED",
-  killed: "KILLED",
-  new: "NEW",
-  new_saving: "NEW_SAVING",
-  running: "RUNNING",
-  submitted: "SUBMITTED",
-  frozen: "FROZEN",
-  stopped: "STOPPED"
-};

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/models/slider_app_alert.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/models/slider_app_alert.js b/contrib/views/slider/src/main/resources/ui/app/models/slider_app_alert.js
deleted file mode 100644
index f62c3ab..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/models/slider_app_alert.js
+++ /dev/null
@@ -1,149 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.SliderAppAlert = DS.Model.extend({
-  /**
-   * @type {string}
-   */
-  title: DS.attr('string'),
-
-  /**
-   * @type {string}
-   */
-  serviceName: DS.attr('string'),
-
-  /**
-   * @type {string}
-   */
-  status: DS.attr('string'),
-
-  /**
-   * @type {string}
-   */
-  message: DS.attr('string'),
-
-  /**
-   * @type {string}
-   */
-  hostName: DS.attr('string'),
-
-  /**
-   * @type {number}
-   */
-  lastTime: DS.attr('number'),
-
-  /**
-   * @type {number}
-   */
-  lastCheck: DS.attr('number'),
-
-  /**
-   * @type {App.SliderApp}
-   */
-  appId: DS.belongsTo('sliderApp'),
-
-  /**
-   * @type {string}
-   */
-  iconClass: function () {
-    var statusMap = Em.Object.create({
-      'OK': 'icon-ok',
-      'WARNING': 'icon-warning-sign',
-      'CRITICAL': 'icon-remove',
-      'PASSIVE': 'icon-medkit'
-    });
-    return statusMap.getWithDefault(this.get('status'), 'icon-question-sign');
-  }.property('status'),
-
-  /**
-   * @type {object}
-   */
-  date: function () {
-    return DS.attr.transforms.date.from(this.get('lastTime'));
-  }.property('lastTime'),
-
-  /**
-   * Provides how long ago this alert happened.
-   *
-   * @type {String}
-   */
-  timeSinceAlert: function () {
-    var d = this.get('date');
-    var timeFormat;
-    var statusMap = Em.Object.create({
-      'OK': 'OK',
-      'WARNING': 'WARN',
-      'CRITICAL': 'CRIT',
-      'PASSIVE': 'MAINT'
-    });
-    var messageKey = statusMap.getWithDefault(this.get('status'), 'UNKNOWN');
-
-    if (d) {
-      timeFormat = Em.I18n.t('sliderApp.alerts.' + messageKey + '.timePrefix');
-      var prevSuffix = $.timeago.settings.strings.suffixAgo;
-      $.timeago.settings.strings.suffixAgo = '';
-      var since = timeFormat.format($.timeago(this.makeTimeAtleastMinuteAgo(d)));
-      $.timeago.settings.strings.suffixAgo = prevSuffix;
-      return since;
-    } else if (d == 0) {
-      timeFormat = Em.I18n.t('sliderApp.alerts.' + messageKey + '.timePrefixShort');
-      return timeFormat;
-    } else {
-      return "";
-    }
-  }.property('date', 'status'),
-
-  /**
-   *
-   * @param d
-   * @return {object}
-   */
-  makeTimeAtleastMinuteAgo: function (d) {
-    var diff = (new Date).getTime() - d.getTime();
-    if (diff < 60000) {
-      diff = 60000 - diff;
-      return new Date(d.getTime() - diff);
-    }
-    return d;
-  },
-
-  /**
-   * Provides more details about when this alert happened.
-   *
-   * @type {String}
-   */
-  timeSinceAlertDetails: function () {
-    var details = "";
-    var date = this.get('date');
-    if (date) {
-      var dateString = date.toDateString();
-      dateString = dateString.substr(dateString.indexOf(" ") + 1);
-      dateString = Em.I18n.t('sliderApp.alerts.occurredOn').format(dateString, date.toLocaleTimeString());
-      details += dateString;
-    }
-    var lastCheck = this.get('lastCheck');
-    if (lastCheck) {
-      lastCheck = new Date(lastCheck * 1000);
-      details = details ? details + Em.I18n.t('sliderApp.alerts.brLastCheck').format($.timeago(lastCheck)) : Em.I18n.t('sliderApp.alerts.lastCheck').format($.timeago(lastCheck));
-    }
-    return details;
-  }.property('lastCheck', 'date')
-
-});
-
-App.SliderAppAlert.FIXTURES = [];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/models/slider_app_component.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/models/slider_app_component.js b/contrib/views/slider/src/main/resources/ui/app/models/slider_app_component.js
deleted file mode 100644
index 6a577c2..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/models/slider_app_component.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.SliderAppComponent = DS.Model.extend({
-
-  /**
-   * @type {string}
-   */
-  status: DS.attr('string'),
-
-  /**
-   * @type {string}
-   */
-  host: DS.attr('string'),
-
-  /**
-   * @type {string}
-   */
-  componentName: DS.attr('string'),
-
-  /**
-   * @type {string}
-   */
-  containerId: DS.attr('string'),
-
-  /**
-   * @type {App.SliderApp}
-   */
-  appId: DS.belongsTo('sliderApp'),
-
-  /**
-   * Is component running (used in the templates)
-   * @type {bool}
-   */
-  isRunning: function() {
-    return this.get('status') === 'Running';
-  }.property('status'),
-
-  url: function() {
-    var host = this.get('host');
-    var containerId = this.get('containerId');
-    if (host != null && containerId != null) {
-      return "http://" + this.get('host') + ":8042/node/container/" + this.get('containerId');
-    }
-    return null;
-  }.property('host', 'containerId')
-
-});
-
-App.SliderAppComponent.FIXTURES = [];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/models/slider_app_type.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/models/slider_app_type.js b/contrib/views/slider/src/main/resources/ui/app/models/slider_app_type.js
deleted file mode 100644
index cb376bc..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/models/slider_app_type.js
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.SliderAppType = DS.Model.extend({
-
-  /**
-   * @type {string}
-   */
-  index: DS.attr('string'),
-
-  /**
-   * @type {string}
-   */
-  typeName: DS.attr('string'),
-
-  /**
-   * @type {string}
-   */
-  typeVersion: DS.attr('string'),
-
-  /**
-   * @type {App.SliderAppTypeComponent[]}
-   */
-  components: DS.hasMany('sliderAppTypeComponent'),
-
-  /**
-   * @type {string}
-   */
-  description: DS.attr('string'),
-
-  /**
-   * @type {string}
-   */
-  version: DS.attr('string'),
-
-  /**
-   * @type {object}
-   */
-  configs: DS.attr('object'),
-  
-  displayName : function() {
-    var typeName = this.get('typeName');
-    var typeVersion = this.get('typeVersion');
-    return (typeName == null ? '' : typeName) + " ("
-        + (typeVersion == null ? '' : typeVersion) + ")"
-  }.property('typeName', 'typeVersion')
-});
-
-App.SliderAppType.FIXTURES = [];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/models/slider_app_type_component.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/models/slider_app_type_component.js b/contrib/views/slider/src/main/resources/ui/app/models/slider_app_type_component.js
deleted file mode 100644
index 1576b04..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/models/slider_app_type_component.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.SliderAppTypeComponent = DS.Model.extend({
-
-  /**
-   * @type {string}
-   */
-  index: DS.attr('string'), // (app-type + name)
-
-  /**
-   * @type {string}
-   */
-  name: DS.attr('string'),
-
-  /**
-   * @type {string}
-   */
-  displayName: DS.attr('string'),
-
-  /**
-   * @type {number}
-   */
-  defaultNumInstances: DS.attr('number'),
-
-  /**
-   * @type {number}
-   */
-  defaultYARNMemory: DS.attr('number'),
-
-  /**
-   * @type {number}
-   */
-  defaultYARNCPU: DS.attr('number'),
-
-  /**
-   * @type {App.SliderAppType}
-   */
-  appType: DS.belongsTo('sliderAppType'),
-
-  /**
-   * @type {number}
-   */
-  priority: DS.attr('string')
-
-});
-
-App.SliderAppTypeComponent.FIXTURES = [];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/models/slider_config.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/models/slider_config.js b/contrib/views/slider/src/main/resources/ui/app/models/slider_config.js
deleted file mode 100644
index b1b2129..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/models/slider_config.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Slider config-property (see Ambari-Admin view-settings)
- * Also see <code>view.xml</code>
- * @type {DS.Model}
- */
-App.SliderConfig = DS.Model.extend({
-
-  /**
-   * Name in the Ambari-Admin
-   * @type {string}
-   */
-  viewConfigName: DS.attr('string'),
-
-  /**
-   * Shown name
-   * @type {string}
-   */
-  displayName: DS.attr('string'),
-
-  /**
-   * @type {null|string}
-   */
-  value: null
-
-});
-
-App.SliderConfig.FIXTURES = [];

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/models/slider_quick_link.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/models/slider_quick_link.js b/contrib/views/slider/src/main/resources/ui/app/models/slider_quick_link.js
deleted file mode 100644
index d526ee7..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/models/slider_quick_link.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.QuickLink = DS.Model.extend({
-
-  /**
-   * @type {string}
-   */
-  label: DS.attr('string'),
-
-  /**
-   * @type {string}
-   */
-  url: DS.attr('string')
-
-});
-
-App.QuickLink.FIXTURES = [];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/models/typed_property.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/models/typed_property.js b/contrib/views/slider/src/main/resources/ui/app/models/typed_property.js
deleted file mode 100644
index 3c7e919..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/models/typed_property.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.TypedProperty = DS.Model.extend({
-
-  /**
-   * @type {string}
-   */
-  key: DS.attr('string'),
-
-  /**
-   * @type {string}
-   */
-  value: DS.attr('string'),
-
-  /**
-   * @type {string}
-   */
-  type: DS.attr('string') // (one of 'date', 'host')
-
-});
-
-App.TypedProperty.FIXTURES = [];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/routes/create_app_wizard.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/routes/create_app_wizard.js b/contrib/views/slider/src/main/resources/ui/app/routes/create_app_wizard.js
deleted file mode 100644
index de1f52d..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/routes/create_app_wizard.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-App.CreateAppWizardRoute = Ember.Route.extend({
-
-  controller: null,
-
-  setupController: function (controller) {
-    this.set('controller', controller);
-  },
-
-  actions: {
-    nextStep: function () {
-      this.get('controller').nextStep();
-    },
-
-    prevStep: function () {
-      this.get('controller').prevStep();
-    }
-  }
-});
-
-App.CreateAppWizardStep1Route = Em.Route.extend({
-
-  setupController: function(controller, model) {
-    controller.set('model', model);
-    controller.initializeNewApp();
-    controller.loadAvailableTypes();
-  }
-
-});
-
-App.CreateAppWizardStep2Route = Em.Route.extend({
-
-  setupController: function(controller, model) {
-    controller.set('model', model);
-    controller.initializeNewApp();
-  }
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/routes/main.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/routes/main.js b/contrib/views/slider/src/main/resources/ui/app/routes/main.js
deleted file mode 100644
index fc83860..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/routes/main.js
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.ApplicationRoute = Ember.Route.extend({
-  renderTemplate: function() {
-    this.render();
-    var controller = this.controllerFor('tooltip-box');
-    this.render("bs-tooltip-box", {
-      outlet: "bs-tooltip-box",
-      controller: controller,
-      into: "application"
-    });
-  }
-});
-
-App.IndexRoute = Ember.Route.extend({
-
-  model: function () {
-    return this.modelFor('sliderApps');
-  },
-
-  redirect: function () {
-    this.transitionTo('slider_apps');
-  }
-
-});
-
-App.SliderAppsRoute = Ember.Route.extend({
-
-  model: function () {
-    return this.store.all('sliderApp');
-  },
-
-
-  setupController: function(controller, model) {
-    controller.set('model', model);
-
-    // Load sliderConfigs to storage
-    App.SliderApp.store.pushMany('sliderConfig', Em.A([
-      Em.Object.create({id: 1, required: false, viewConfigName: 'site.global.metric_collector_host', displayName: 'metricsServer'}),
-      Em.Object.create({id: 2, required: false, viewConfigName: 'site.global.metric_collector_port', displayName: 'metricsPort'}),
-      Em.Object.create({id: 3, required: false, viewConfigName: 'site.global.metric_collector_lib', displayName: 'metricsLib'}),
-      Em.Object.create({id: 4, required: false, viewConfigName: 'yarn.rm.webapp.url', displayName: 'yarnRmWebappUrl'})
-    ]));
-  },
-
-  actions: {
-    createApp: function () {
-      this.transitionTo('createAppWizard');
-    }
-  }
-});
-
-App.SliderAppRoute = Ember.Route.extend({
-
-  model: function(params) {
-    return this.store.all('sliderApp', params.slider_app_id);
-  }
-
-});
\ No newline at end of file


[16/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.timeago.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.timeago.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.timeago.js
deleted file mode 100644
index 90e9553..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.timeago.js
+++ /dev/null
@@ -1,214 +0,0 @@
-/**
- * Timeago is a jQuery plugin that makes it easy to support automatically
- * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
- *
- * @name timeago
- * @version 1.4.1
- * @requires jQuery v1.2.3+
- * @author Ryan McGeary
- * @license MIT License - http://www.opensource.org/licenses/mit-license.php
- *
- * For usage and examples, visit:
- * http://timeago.yarp.com/
- *
- * Copyright (c) 2008-2013, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org)
- */
-
-(function (factory) {
-  if (typeof define === 'function' && define.amd) {
-    // AMD. Register as an anonymous module.
-    define(['jquery'], factory);
-  } else {
-    // Browser globals
-    factory(jQuery);
-  }
-}(function ($) {
-  $.timeago = function(timestamp) {
-    if (timestamp instanceof Date) {
-      return inWords(timestamp);
-    } else if (typeof timestamp === "string") {
-      return inWords($.timeago.parse(timestamp));
-    } else if (typeof timestamp === "number") {
-      return inWords(new Date(timestamp));
-    } else {
-      return inWords($.timeago.datetime(timestamp));
-    }
-  };
-  var $t = $.timeago;
-
-  $.extend($.timeago, {
-    settings: {
-      refreshMillis: 60000,
-      allowPast: true,
-      allowFuture: false,
-      localeTitle: false,
-      cutoff: 0,
-      strings: {
-        prefixAgo: null,
-        prefixFromNow: null,
-        suffixAgo: "ago",
-        suffixFromNow: "from now",
-        inPast: 'any moment now',
-        seconds: "less than a minute",
-        minute: "about a minute",
-        minutes: "%d minutes",
-        hour: "about an hour",
-        hours: "about %d hours",
-        day: "a day",
-        days: "%d days",
-        month: "about a month",
-        months: "%d months",
-        year: "about a year",
-        years: "%d years",
-        wordSeparator: " ",
-        numbers: []
-      }
-    },
-
-    inWords: function(distanceMillis) {
-      if(!this.settings.allowPast && ! this.settings.allowFuture) {
-        throw 'timeago allowPast and allowFuture settings can not both be set to false.';
-      }
-
-      var $l = this.settings.strings;
-      var prefix = $l.prefixAgo;
-      var suffix = $l.suffixAgo;
-      if (this.settings.allowFuture) {
-        if (distanceMillis < 0) {
-          prefix = $l.prefixFromNow;
-          suffix = $l.suffixFromNow;
-        }
-      }
-
-      if(!this.settings.allowPast && distanceMillis >= 0) {
-        return this.settings.strings.inPast;
-      }
-
-      var seconds = Math.abs(distanceMillis) / 1000;
-      var minutes = seconds / 60;
-      var hours = minutes / 60;
-      var days = hours / 24;
-      var years = days / 365;
-
-      function substitute(stringOrFunction, number) {
-        var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
-        var value = ($l.numbers && $l.numbers[number]) || number;
-        return string.replace(/%d/i, value);
-      }
-
-      var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
-        seconds < 90 && substitute($l.minute, 1) ||
-        minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
-        minutes < 90 && substitute($l.hour, 1) ||
-        hours < 24 && substitute($l.hours, Math.round(hours)) ||
-        hours < 42 && substitute($l.day, 1) ||
-        days < 30 && substitute($l.days, Math.round(days)) ||
-        days < 45 && substitute($l.month, 1) ||
-        days < 365 && substitute($l.months, Math.round(days / 30)) ||
-        years < 1.5 && substitute($l.year, 1) ||
-        substitute($l.years, Math.round(years));
-
-      var separator = $l.wordSeparator || "";
-      if ($l.wordSeparator === undefined) { separator = " "; }
-      return $.trim([prefix, words, suffix].join(separator));
-    },
-
-    parse: function(iso8601) {
-      var s = $.trim(iso8601);
-      s = s.replace(/\.\d+/,""); // remove milliseconds
-      s = s.replace(/-/,"/").replace(/-/,"/");
-      s = s.replace(/T/," ").replace(/Z/," UTC");
-      s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400
-      s = s.replace(/([\+\-]\d\d)$/," $100"); // +09 -> +0900
-      return new Date(s);
-    },
-    datetime: function(elem) {
-      var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
-      return $t.parse(iso8601);
-    },
-    isTime: function(elem) {
-      // jQuery's `is()` doesn't play well with HTML5 in IE
-      return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
-    }
-  });
-
-  // functions that can be called via $(el).timeago('action')
-  // init is default when no action is given
-  // functions are called with context of a single element
-  var functions = {
-    init: function(){
-      var refresh_el = $.proxy(refresh, this);
-      refresh_el();
-      var $s = $t.settings;
-      if ($s.refreshMillis > 0) {
-        this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis);
-      }
-    },
-    update: function(time){
-      var parsedTime = $t.parse(time);
-      $(this).data('timeago', { datetime: parsedTime });
-      if($t.settings.localeTitle) $(this).attr("title", parsedTime.toLocaleString());
-      refresh.apply(this);
-    },
-    updateFromDOM: function(){
-      $(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) });
-      refresh.apply(this);
-    },
-    dispose: function () {
-      if (this._timeagoInterval) {
-        window.clearInterval(this._timeagoInterval);
-        this._timeagoInterval = null;
-      }
-    }
-  };
-
-  $.fn.timeago = function(action, options) {
-    var fn = action ? functions[action] : functions.init;
-    if(!fn){
-      throw new Error("Unknown function name '"+ action +"' for timeago");
-    }
-    // each over objects here and call the requested function
-    this.each(function(){
-      fn.call(this, options);
-    });
-    return this;
-  };
-
-  function refresh() {
-    var data = prepareData(this);
-    var $s = $t.settings;
-
-    if (!isNaN(data.datetime)) {
-      if ( $s.cutoff == 0 || Math.abs(distance(data.datetime)) < $s.cutoff) {
-        $(this).text(inWords(data.datetime));
-      }
-    }
-    return this;
-  }
-
-  function prepareData(element) {
-    element = $(element);
-    if (!element.data("timeago")) {
-      element.data("timeago", { datetime: $t.datetime(element) });
-      var text = $.trim(element.text());
-      if ($t.settings.localeTitle) {
-        element.attr("title", element.data('timeago').datetime.toLocaleString());
-      } else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) {
-        element.attr("title", text);
-      }
-    }
-    return element.data("timeago");
-  }
-
-  function inWords(date) {
-    return $t.inWords(distance(date));
-  }
-
-  function distance(date) {
-    return (new Date().getTime() - date.getTime());
-  }
-
-  // fix for IE6 suckage
-  document.createElement("abbr");
-  document.createElement("time");
-}));
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.ui.core.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.ui.core.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.ui.core.js
deleted file mode 100644
index 1285a6d..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.ui.core.js
+++ /dev/null
@@ -1,334 +0,0 @@
-/*!
- * jQuery UI 1.8.23
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI
- */
-(function( $, undefined ) {
-
-// prevent duplicate loading
-// this is only a problem because we proxy existing functions
-// and we don't want to double proxy them
-$.ui = $.ui || {};
-if ( $.ui.version ) {
-	return;
-}
-
-$.extend( $.ui, {
-	version: "1.8.23",
-
-	keyCode: {
-		ALT: 18,
-		BACKSPACE: 8,
-		CAPS_LOCK: 20,
-		COMMA: 188,
-		COMMAND: 91,
-		COMMAND_LEFT: 91, // COMMAND
-		COMMAND_RIGHT: 93,
-		CONTROL: 17,
-		DELETE: 46,
-		DOWN: 40,
-		END: 35,
-		ENTER: 13,
-		ESCAPE: 27,
-		HOME: 36,
-		INSERT: 45,
-		LEFT: 37,
-		MENU: 93, // COMMAND_RIGHT
-		NUMPAD_ADD: 107,
-		NUMPAD_DECIMAL: 110,
-		NUMPAD_DIVIDE: 111,
-		NUMPAD_ENTER: 108,
-		NUMPAD_MULTIPLY: 106,
-		NUMPAD_SUBTRACT: 109,
-		PAGE_DOWN: 34,
-		PAGE_UP: 33,
-		PERIOD: 190,
-		RIGHT: 39,
-		SHIFT: 16,
-		SPACE: 32,
-		TAB: 9,
-		UP: 38,
-		WINDOWS: 91 // COMMAND
-	}
-});
-
-// plugins
-$.fn.extend({
-	propAttr: $.fn.prop || $.fn.attr,
-
-	_focus: $.fn.focus,
-	focus: function( delay, fn ) {
-		return typeof delay === "number" ?
-			this.each(function() {
-				var elem = this;
-				setTimeout(function() {
-					$( elem ).focus();
-					if ( fn ) {
-						fn.call( elem );
-					}
-				}, delay );
-			}) :
-			this._focus.apply( this, arguments );
-	},
-
-	scrollParent: function() {
-		var scrollParent;
-		if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
-			scrollParent = this.parents().filter(function() {
-				return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
-			}).eq(0);
-		} else {
-			scrollParent = this.parents().filter(function() {
-				return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
-			}).eq(0);
-		}
-
-		return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;
-	},
-
-	zIndex: function( zIndex ) {
-		if ( zIndex !== undefined ) {
-			return this.css( "zIndex", zIndex );
-		}
-
-		if ( this.length ) {
-			var elem = $( this[ 0 ] ), position, value;
-			while ( elem.length && elem[ 0 ] !== document ) {
-				// Ignore z-index if position is set to a value where z-index is ignored by the browser
-				// This makes behavior of this function consistent across browsers
-				// WebKit always returns auto if the element is positioned
-				position = elem.css( "position" );
-				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
-					// IE returns 0 when zIndex is not specified
-					// other browsers return a string
-					// we ignore the case of nested elements with an explicit value of 0
-					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
-					value = parseInt( elem.css( "zIndex" ), 10 );
-					if ( !isNaN( value ) && value !== 0 ) {
-						return value;
-					}
-				}
-				elem = elem.parent();
-			}
-		}
-
-		return 0;
-	},
-
-	disableSelection: function() {
-		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
-			".ui-disableSelection", function( event ) {
-				event.preventDefault();
-			});
-	},
-
-	enableSelection: function() {
-		return this.unbind( ".ui-disableSelection" );
-	}
-});
-
-// support: jQuery <1.8
-if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
-	$.each( [ "Width", "Height" ], function( i, name ) {
-		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
-			type = name.toLowerCase(),
-			orig = {
-				innerWidth: $.fn.innerWidth,
-				innerHeight: $.fn.innerHeight,
-				outerWidth: $.fn.outerWidth,
-				outerHeight: $.fn.outerHeight
-			};
-
-		function reduce( elem, size, border, margin ) {
-			$.each( side, function() {
-				size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0;
-				if ( border ) {
-					size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0;
-				}
-				if ( margin ) {
-					size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0;
-				}
-			});
-			return size;
-		}
-
-		$.fn[ "inner" + name ] = function( size ) {
-			if ( size === undefined ) {
-				return orig[ "inner" + name ].call( this );
-			}
-
-			return this.each(function() {
-				$( this ).css( type, reduce( this, size ) + "px" );
-			});
-		};
-
-		$.fn[ "outer" + name] = function( size, margin ) {
-			if ( typeof size !== "number" ) {
-				return orig[ "outer" + name ].call( this, size );
-			}
-
-			return this.each(function() {
-				$( this).css( type, reduce( this, size, true, margin ) + "px" );
-			});
-		};
-	});
-}
-
-// selectors
-function focusable( element, isTabIndexNotNaN ) {
-	var nodeName = element.nodeName.toLowerCase();
-	if ( "area" === nodeName ) {
-		var map = element.parentNode,
-			mapName = map.name,
-			img;
-		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
-			return false;
-		}
-		img = $( "img[usemap=#" + mapName + "]" )[0];
-		return !!img && visible( img );
-	}
-	return ( /input|select|textarea|button|object/.test( nodeName )
-		? !element.disabled
-		: "a" == nodeName
-			? element.href || isTabIndexNotNaN
-			: isTabIndexNotNaN)
-		// the element and all of its ancestors must be visible
-		&& visible( element );
-}
-
-function visible( element ) {
-	return !$( element ).parents().andSelf().filter(function() {
-		return $.curCSS( this, "visibility" ) === "hidden" ||
-			$.expr.filters.hidden( this );
-	}).length;
-}
-
-$.extend( $.expr[ ":" ], {
-	data: $.expr.createPseudo ?
-		$.expr.createPseudo(function( dataName ) {
-			return function( elem ) {
-				return !!$.data( elem, dataName );
-			};
-		}) :
-		// support: jQuery <1.8
-		function( elem, i, match ) {
-			return !!$.data( elem, match[ 3 ] );
-		},
-
-	focusable: function( element ) {
-		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
-	},
-
-	tabbable: function( element ) {
-		var tabIndex = $.attr( element, "tabindex" ),
-			isTabIndexNaN = isNaN( tabIndex );
-		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
-	}
-});
-
-// support
-$(function() {
-	var body = document.body,
-		div = body.appendChild( div = document.createElement( "div" ) );
-
-	// access offsetHeight before setting the style to prevent a layout bug
-	// in IE 9 which causes the elemnt to continue to take up space even
-	// after it is removed from the DOM (#8026)
-	div.offsetHeight;
-
-	$.extend( div.style, {
-		minHeight: "100px",
-		height: "auto",
-		padding: 0,
-		borderWidth: 0
-	});
-
-	$.support.minHeight = div.offsetHeight === 100;
-	$.support.selectstart = "onselectstart" in div;
-
-	// set display to none to avoid a layout bug in IE
-	// http://dev.jquery.com/ticket/4014
-	body.removeChild( div ).style.display = "none";
-});
-
-// jQuery <1.4.3 uses curCSS, in 1.4.3 - 1.7.2 curCSS = css, 1.8+ only has css
-if ( !$.curCSS ) {
-	$.curCSS = $.css;
-}
-
-
-
-
-
-// deprecated
-$.extend( $.ui, {
-	// $.ui.plugin is deprecated.  Use the proxy pattern instead.
-	plugin: {
-		add: function( module, option, set ) {
-			var proto = $.ui[ module ].prototype;
-			for ( var i in set ) {
-				proto.plugins[ i ] = proto.plugins[ i ] || [];
-				proto.plugins[ i ].push( [ option, set[ i ] ] );
-			}
-		},
-		call: function( instance, name, args ) {
-			var set = instance.plugins[ name ];
-			if ( !set || !instance.element[ 0 ].parentNode ) {
-				return;
-			}
-	
-			for ( var i = 0; i < set.length; i++ ) {
-				if ( instance.options[ set[ i ][ 0 ] ] ) {
-					set[ i ][ 1 ].apply( instance.element, args );
-				}
-			}
-		}
-	},
-	
-	// will be deprecated when we switch to jQuery 1.4 - use jQuery.contains()
-	contains: function( a, b ) {
-		return document.compareDocumentPosition ?
-			a.compareDocumentPosition( b ) & 16 :
-			a !== b && a.contains( b );
-	},
-	
-	// only used by resizable
-	hasScroll: function( el, a ) {
-	
-		//If overflow is hidden, the element might have extra content, but the user wants to hide it
-		if ( $( el ).css( "overflow" ) === "hidden") {
-			return false;
-		}
-	
-		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
-			has = false;
-	
-		if ( el[ scroll ] > 0 ) {
-			return true;
-		}
-	
-		// TODO: determine which cases actually cause this to happen
-		// if the element doesn't have the scroll set, see if it's possible to
-		// set the scroll
-		el[ scroll ] = 1;
-		has = ( el[ scroll ] > 0 );
-		el[ scroll ] = 0;
-		return has;
-	},
-	
-	// these are odd functions, fix the API or move into individual plugins
-	isOverAxis: function( x, reference, size ) {
-		//Determines when x coordinate is over "b" element axis
-		return ( x > reference ) && ( x < ( reference + size ) );
-	},
-	isOver: function( y, x, top, left, height, width ) {
-		//Determines when x, y coordinates is over "b" element
-		return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width );
-	}
-});
-
-})( jQuery );

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.ui.mouse.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.ui.mouse.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.ui.mouse.js
deleted file mode 100644
index 78c8ef6..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.ui.mouse.js
+++ /dev/null
@@ -1,175 +0,0 @@
-/*!
- * jQuery UI Mouse 1.8.23
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Mouse
- *
- * Depends:
- *	jquery.ui.widget.js
- */
-(function ($, undefined) {
-
-  var mouseHandled = false;
-  $(document).mouseup(function (e) {
-    mouseHandled = false;
-  });
-
-  $.widget("ui.mouse", {
-    options:{
-      cancel:':input,option',
-      distance:1,
-      delay:0
-    },
-    _mouseInit:function () {
-      var self = this;
-
-      this.element
-        .bind('mousedown.' + this.widgetName, function (event) {
-          return self._mouseDown(event);
-        })
-        .bind('click.' + this.widgetName, function (event) {
-          if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) {
-            $.removeData(event.target, self.widgetName + '.preventClickEvent');
-            event.stopImmediatePropagation();
-            return false;
-          }
-        });
-
-      this.started = false;
-    },
-
-    // TODO: make sure destroying one instance of mouse doesn't mess with
-    // other instances of mouse
-    _mouseDestroy:function () {
-      this.element.unbind('.' + this.widgetName);
-      if (this._mouseMoveDelegate) {
-        $(document)
-          .unbind('mousemove.' + this.widgetName, this._mouseMoveDelegate)
-          .unbind('mouseup.' + this.widgetName, this._mouseUpDelegate);
-      }
-    },
-
-    _mouseDown:function (event) {
-      // don't let more than one widget handle mouseStart
-      if (mouseHandled) {
-        return
-      }
-      ;
-
-      // we may have missed mouseup (out of window)
-      (this._mouseStarted && this._mouseUp(event));
-
-      this._mouseDownEvent = event;
-
-      var self = this,
-        btnIsLeft = (event.which == 1),
-      // event.target.nodeName works around a bug in IE 8 with
-      // disabled inputs (#7620)
-        elIsCancel = (typeof this.options.cancel == "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
-      if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
-        return true;
-      }
-
-      this.mouseDelayMet = !this.options.delay;
-      if (!this.mouseDelayMet) {
-        this._mouseDelayTimer = setTimeout(function () {
-          self.mouseDelayMet = true;
-        }, this.options.delay);
-      }
-
-      if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
-        this._mouseStarted = (this._mouseStart(event) !== false);
-        if (!this._mouseStarted) {
-          event.preventDefault();
-          return true;
-        }
-      }
-
-      // Click event may never have fired (Gecko & Opera)
-      if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) {
-        $.removeData(event.target, this.widgetName + '.preventClickEvent');
-      }
-
-      // these delegates are required to keep context
-      this._mouseMoveDelegate = function (event) {
-        return self._mouseMove(event);
-      };
-      this._mouseUpDelegate = function (event) {
-        return self._mouseUp(event);
-      };
-      $(document)
-        .bind('mousemove.' + this.widgetName, this._mouseMoveDelegate)
-        .bind('mouseup.' + this.widgetName, this._mouseUpDelegate);
-
-      event.preventDefault();
-
-      mouseHandled = true;
-      return true;
-    },
-
-    _mouseMove:function (event) {
-      // IE mouseup check - mouseup happened when mouse was out of window
-      if ($.browser.msie && !(document.documentMode >= 9) && !event.button) {
-        return this._mouseUp(event);
-      }
-
-      if (this._mouseStarted) {
-        this._mouseDrag(event);
-        return event.preventDefault();
-      }
-
-      if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
-        this._mouseStarted =
-          (this._mouseStart(this._mouseDownEvent, event) !== false);
-        (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
-      }
-
-      return !this._mouseStarted;
-    },
-
-    _mouseUp:function (event) {
-      $(document)
-        .unbind('mousemove.' + this.widgetName, this._mouseMoveDelegate)
-        .unbind('mouseup.' + this.widgetName, this._mouseUpDelegate);
-
-      if (this._mouseStarted) {
-        this._mouseStarted = false;
-
-        if (event.target == this._mouseDownEvent.target) {
-          $.data(event.target, this.widgetName + '.preventClickEvent', true);
-        }
-
-        this._mouseStop(event);
-      }
-
-      return false;
-    },
-
-    _mouseDistanceMet:function (event) {
-      return (Math.max(
-        Math.abs(this._mouseDownEvent.pageX - event.pageX),
-        Math.abs(this._mouseDownEvent.pageY - event.pageY)
-      ) >= this.options.distance
-        );
-    },
-
-    _mouseDelayMet:function (event) {
-      return this.mouseDelayMet;
-    },
-
-    // These are placeholder methods, to be overriden by extending plugin
-    _mouseStart:function (event) {
-    },
-    _mouseDrag:function (event) {
-    },
-    _mouseStop:function (event) {
-    },
-    _mouseCapture:function (event) {
-      return true;
-    }
-  });
-
-})(jQuery);

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.ui.sortable.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.ui.sortable.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.ui.sortable.js
deleted file mode 100644
index 8aa4dc4..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.ui.sortable.js
+++ /dev/null
@@ -1,1088 +0,0 @@
-/*!
- * jQuery UI Sortable 1.9.0
- * http://jqueryui.com
- *
- * Copyright 2012 jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- *
- * http://api.jqueryui.com/sortable/
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
- */
-(function( $, undefined ) {
-
-$.widget("ui.sortable", $.ui.mouse, {
-	version: "1.9.0",
-	widgetEventPrefix: "sort",
-	ready: false,
-	options: {
-		appendTo: "parent",
-		axis: false,
-		connectWith: false,
-		containment: false,
-		cursor: 'auto',
-		cursorAt: false,
-		dropOnEmpty: true,
-		forcePlaceholderSize: false,
-		forceHelperSize: false,
-		grid: false,
-		handle: false,
-		helper: "original",
-		items: '> *',
-		opacity: false,
-		placeholder: false,
-		revert: false,
-		scroll: true,
-		scrollSensitivity: 20,
-		scrollSpeed: 20,
-		scope: "default",
-		tolerance: "intersect",
-		zIndex: 1000
-	},
-	_create: function() {
-
-		var o = this.options;
-		this.containerCache = {};
-		this.element.addClass("ui-sortable");
-
-		//Get the items
-		this.refresh();
-
-		//Let's determine if the items are being displayed horizontally
-		this.floating = this.items.length ? o.axis === 'x' || (/left|right/).test(this.items[0].item.css('float')) || (/inline|table-cell/).test(this.items[0].item.css('display')) : false;
-
-		//Let's determine the parent's offset
-		this.offset = this.element.offset();
-
-		//Initialize mouse events for interaction
-		this._mouseInit();
-
-		//We're ready to go
-		this.ready = true
-
-	},
-
-	_destroy: function() {
-		this.element
-			.removeClass("ui-sortable ui-sortable-disabled");
-		this._mouseDestroy();
-
-		for ( var i = this.items.length - 1; i >= 0; i-- )
-			this.items[i].item.removeData(this.widgetName + "-item");
-
-		return this;
-	},
-
-	_setOption: function(key, value){
-		if ( key === "disabled" ) {
-			this.options[ key ] = value;
-
-			this.widget().toggleClass( "ui-sortable-disabled", !!value );
-		} else {
-			// Don't call widget base _setOption for disable as it adds ui-state-disabled class
-			$.Widget.prototype._setOption.apply(this, arguments);
-		}
-	},
-
-	_mouseCapture: function(event, overrideHandle) {
-		var that = this;
-
-		if (this.reverting) {
-			return false;
-		}
-
-		if(this.options.disabled || this.options.type == 'static') return false;
-
-		//We have to refresh the items data once first
-		this._refreshItems(event);
-
-		//Find out if the clicked node (or one of its parents) is a actual item in this.items
-		var currentItem = null, nodes = $(event.target).parents().each(function() {
-			if($.data(this, that.widgetName + '-item') == that) {
-				currentItem = $(this);
-				return false;
-			}
-		});
-		if($.data(event.target, that.widgetName + '-item') == that) currentItem = $(event.target);
-
-		if(!currentItem) return false;
-		if(this.options.handle && !overrideHandle) {
-			var validHandle = false;
-
-			$(this.options.handle, currentItem).find("*").andSelf().each(function() { if(this == event.target) validHandle = true; });
-			if(!validHandle) return false;
-		}
-
-		this.currentItem = currentItem;
-		this._removeCurrentsFromItems();
-		return true;
-
-	},
-
-	_mouseStart: function(event, overrideHandle, noActivation) {
-
-		var o = this.options;
-		this.currentContainer = this;
-
-		//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
-		this.refreshPositions();
-
-		//Create and append the visible helper
-		this.helper = this._createHelper(event);
-
-		//Cache the helper size
-		this._cacheHelperProportions();
-
-		/*
-		 * - Position generation -
-		 * This block generates everything position related - it's the core of draggables.
-		 */
-
-		//Cache the margins of the original element
-		this._cacheMargins();
-
-		//Get the next scrolling parent
-		this.scrollParent = this.helper.scrollParent();
-
-		//The element's absolute position on the page minus margins
-		this.offset = this.currentItem.offset();
-		this.offset = {
-			top: this.offset.top - this.margins.top,
-			left: this.offset.left - this.margins.left
-		};
-
-		$.extend(this.offset, {
-			click: { //Where the click happened, relative to the element
-				left: event.pageX - this.offset.left,
-				top: event.pageY - this.offset.top
-			},
-			parent: this._getParentOffset(),
-			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
-		});
-
-		// Only after we got the offset, we can change the helper's position to absolute
-		// TODO: Still need to figure out a way to make relative sorting possible
-		this.helper.css("position", "absolute");
-		this.cssPosition = this.helper.css("position");
-
-		//Generate the original position
-		this.originalPosition = this._generatePosition(event);
-		this.originalPageX = event.pageX;
-		this.originalPageY = event.pageY;
-
-		//Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
-		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
-
-		//Cache the former DOM position
-		this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
-
-		//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
-		if(this.helper[0] != this.currentItem[0]) {
-			this.currentItem.hide();
-		}
-
-		//Create the placeholder
-		this._createPlaceholder();
-
-		//Set a containment if given in the options
-		if(o.containment)
-			this._setContainment();
-
-		if(o.cursor) { // cursor option
-			if ($('body').css("cursor")) this._storedCursor = $('body').css("cursor");
-			$('body').css("cursor", o.cursor);
-		}
-
-		if(o.opacity) { // opacity option
-			if (this.helper.css("opacity")) this._storedOpacity = this.helper.css("opacity");
-			this.helper.css("opacity", o.opacity);
-		}
-
-		if(o.zIndex) { // zIndex option
-			if (this.helper.css("zIndex")) this._storedZIndex = this.helper.css("zIndex");
-			this.helper.css("zIndex", o.zIndex);
-		}
-
-		//Prepare scrolling
-		if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML')
-			this.overflowOffset = this.scrollParent.offset();
-
-		//Call callbacks
-		this._trigger("start", event, this._uiHash());
-
-		//Recache the helper size
-		if(!this._preserveHelperProportions)
-			this._cacheHelperProportions();
-
-
-		//Post 'activate' events to possible containers
-		if(!noActivation) {
-			 for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i]._trigger("activate", event, this._uiHash(this)); }
-		}
-
-		//Prepare possible droppables
-		if($.ui.ddmanager)
-			$.ui.ddmanager.current = this;
-
-		if ($.ui.ddmanager && !o.dropBehaviour)
-			$.ui.ddmanager.prepareOffsets(this, event);
-
-		this.dragging = true;
-
-		this.helper.addClass("ui-sortable-helper");
-		this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
-		return true;
-
-	},
-
-	_mouseDrag: function(event) {
-
-		//Compute the helpers position
-		this.position = this._generatePosition(event);
-		this.positionAbs = this._convertPositionTo("absolute");
-
-		if (!this.lastPositionAbs) {
-			this.lastPositionAbs = this.positionAbs;
-		}
-
-		//Do scrolling
-		if(this.options.scroll) {
-			var o = this.options, scrolled = false;
-			if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') {
-
-				if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
-					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
-				else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity)
-					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
-
-				if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
-					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
-				else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity)
-					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
-
-			} else {
-
-				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
-					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
-				else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
-					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
-
-				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
-					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
-				else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
-					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
-
-			}
-
-			if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
-				$.ui.ddmanager.prepareOffsets(this, event);
-		}
-
-		//Regenerate the absolute position used for position checks
-		this.positionAbs = this._convertPositionTo("absolute");
-
-		//Set the helper position
-		if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
-		if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
-
-		//Rearrange
-		for (var i = this.items.length - 1; i >= 0; i--) {
-
-			//Cache variables and intersection, continue if no intersection
-			var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item);
-			if (!intersection) continue;
-
-			// Only put the placeholder inside the current Container, skip all
-			// items form other containers. This works because when moving
-			// an item from one container to another the
-			// currentContainer is switched before the placeholder is moved.
-			//
-			// Without this moving items in "sub-sortables" can cause the placeholder to jitter
-			// beetween the outer and inner container.
-			if (item.instance !== this.currentContainer) continue;
-
-			if (itemElement != this.currentItem[0] //cannot intersect with itself
-				&&	this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before
-				&&	!$.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked
-				&& (this.options.type == 'semi-dynamic' ? !$.contains(this.element[0], itemElement) : true)
-				//&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container
-			) {
-
-				this.direction = intersection == 1 ? "down" : "up";
-
-				if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) {
-					this._rearrange(event, item);
-				} else {
-					break;
-				}
-
-				this._trigger("change", event, this._uiHash());
-				break;
-			}
-		}
-
-		//Post events to containers
-		this._contactContainers(event);
-
-		//Interconnect with droppables
-		if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
-
-		//Call callbacks
-		this._trigger('sort', event, this._uiHash());
-
-		this.lastPositionAbs = this.positionAbs;
-		return false;
-
-	},
-
-	_mouseStop: function(event, noPropagation) {
-
-		if(!event) return;
-
-		//If we are using droppables, inform the manager about the drop
-		if ($.ui.ddmanager && !this.options.dropBehaviour)
-			$.ui.ddmanager.drop(this, event);
-
-		if(this.options.revert) {
-			var that = this;
-			var cur = this.placeholder.offset();
-
-			this.reverting = true;
-
-			$(this.helper).animate({
-				left: cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft),
-				top: cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop)
-			}, parseInt(this.options.revert, 10) || 500, function() {
-				that._clear(event);
-			});
-		} else {
-			this._clear(event, noPropagation);
-		}
-
-		return false;
-
-	},
-
-	cancel: function() {
-
-		if(this.dragging) {
-
-			this._mouseUp({ target: null });
-
-			if(this.options.helper == "original")
-				this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
-			else
-				this.currentItem.show();
-
-			//Post deactivating events to containers
-			for (var i = this.containers.length - 1; i >= 0; i--){
-				this.containers[i]._trigger("deactivate", null, this._uiHash(this));
-				if(this.containers[i].containerCache.over) {
-					this.containers[i]._trigger("out", null, this._uiHash(this));
-					this.containers[i].containerCache.over = 0;
-				}
-			}
-
-		}
-
-		if (this.placeholder) {
-			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
-			if(this.placeholder[0].parentNode) this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
-			if(this.options.helper != "original" && this.helper && this.helper[0].parentNode) this.helper.remove();
-
-			$.extend(this, {
-				helper: null,
-				dragging: false,
-				reverting: false,
-				_noFinalSort: null
-			});
-
-			if(this.domPosition.prev) {
-				$(this.domPosition.prev).after(this.currentItem);
-			} else {
-				$(this.domPosition.parent).prepend(this.currentItem);
-			}
-		}
-
-		return this;
-
-	},
-
-	serialize: function(o) {
-
-		var items = this._getItemsAsjQuery(o && o.connected);
-		var str = []; o = o || {};
-
-		$(items).each(function() {
-			var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
-			if(res) str.push((o.key || res[1]+'[]')+'='+(o.key && o.expression ? res[1] : res[2]));
-		});
-
-		if(!str.length && o.key) {
-			str.push(o.key + '=');
-		}
-
-		return str.join('&');
-
-	},
-
-	toArray: function(o) {
-
-		var items = this._getItemsAsjQuery(o && o.connected);
-		var ret = []; o = o || {};
-
-		items.each(function() { ret.push($(o.item || this).attr(o.attribute || 'id') || ''); });
-		return ret;
-
-	},
-
-	/* Be careful with the following core functions */
-	_intersectsWith: function(item) {
-
-		var x1 = this.positionAbs.left,
-			x2 = x1 + this.helperProportions.width,
-			y1 = this.positionAbs.top,
-			y2 = y1 + this.helperProportions.height;
-
-		var l = item.left,
-			r = l + item.width,
-			t = item.top,
-			b = t + item.height;
-
-		var dyClick = this.offset.click.top,
-			dxClick = this.offset.click.left;
-
-		var isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r;
-
-		if(	   this.options.tolerance == "pointer"
-			|| this.options.forcePointerForContainers
-			|| (this.options.tolerance != "pointer" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])
-		) {
-			return isOverElement;
-		} else {
-
-			return (l < x1 + (this.helperProportions.width / 2) // Right Half
-				&& x2 - (this.helperProportions.width / 2) < r // Left Half
-				&& t < y1 + (this.helperProportions.height / 2) // Bottom Half
-				&& y2 - (this.helperProportions.height / 2) < b ); // Top Half
-
-		}
-	},
-
-	_intersectsWithPointer: function(item) {
-
-		var isOverElementHeight = (this.options.axis === 'x') || $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
-			isOverElementWidth = (this.options.axis === 'y') || $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
-			isOverElement = isOverElementHeight && isOverElementWidth,
-			verticalDirection = this._getDragVerticalDirection(),
-			horizontalDirection = this._getDragHorizontalDirection();
-
-		if (!isOverElement)
-			return false;
-
-		return this.floating ?
-			( ((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1 )
-			: ( verticalDirection && (verticalDirection == "down" ? 2 : 1) );
-
-	},
-
-	_intersectsWithSides: function(item) {
-
-		var isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
-			isOverRightHalf = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
-			verticalDirection = this._getDragVerticalDirection(),
-			horizontalDirection = this._getDragHorizontalDirection();
-
-		if (this.floating && horizontalDirection) {
-			return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf));
-		} else {
-			return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && !isOverBottomHalf));
-		}
-
-	},
-
-	_getDragVerticalDirection: function() {
-		var delta = this.positionAbs.top - this.lastPositionAbs.top;
-		return delta != 0 && (delta > 0 ? "down" : "up");
-	},
-
-	_getDragHorizontalDirection: function() {
-		var delta = this.positionAbs.left - this.lastPositionAbs.left;
-		return delta != 0 && (delta > 0 ? "right" : "left");
-	},
-
-	refresh: function(event) {
-		this._refreshItems(event);
-		this.refreshPositions();
-		return this;
-	},
-
-	_connectWith: function() {
-		var options = this.options;
-		return options.connectWith.constructor == String
-			? [options.connectWith]
-			: options.connectWith;
-	},
-
-	_getItemsAsjQuery: function(connected) {
-
-		var items = [];
-		var queries = [];
-		var connectWith = this._connectWith();
-
-		if(connectWith && connected) {
-			for (var i = connectWith.length - 1; i >= 0; i--){
-				var cur = $(connectWith[i]);
-				for (var j = cur.length - 1; j >= 0; j--){
-					var inst = $.data(cur[j], this.widgetName);
-					if(inst && inst != this && !inst.options.disabled) {
-						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), inst]);
-					}
-				};
-			};
-		}
-
-		queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), this]);
-
-		for (var i = queries.length - 1; i >= 0; i--){
-			queries[i][0].each(function() {
-				items.push(this);
-			});
-		};
-
-		return $(items);
-
-	},
-
-	_removeCurrentsFromItems: function() {
-
-		var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
-
-		for (var i=0; i < this.items.length; i++) {
-
-			for (var j=0; j < list.length; j++) {
-				if(list[j] == this.items[i].item[0])
-					this.items.splice(i,1);
-			};
-
-		};
-
-	},
-
-	_refreshItems: function(event) {
-
-		this.items = [];
-		this.containers = [this];
-		var items = this.items;
-		var queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]];
-		var connectWith = this._connectWith();
-
-		if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
-			for (var i = connectWith.length - 1; i >= 0; i--){
-				var cur = $(connectWith[i]);
-				for (var j = cur.length - 1; j >= 0; j--){
-					var inst = $.data(cur[j], this.widgetName);
-					if(inst && inst != this && !inst.options.disabled) {
-						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
-						this.containers.push(inst);
-					}
-				};
-			};
-		}
-
-		for (var i = queries.length - 1; i >= 0; i--) {
-			var targetData = queries[i][1];
-			var _queries = queries[i][0];
-
-			for (var j=0, queriesLength = _queries.length; j < queriesLength; j++) {
-				var item = $(_queries[j]);
-
-				item.data(this.widgetName + '-item', targetData); // Data for target checking (mouse manager)
-
-				items.push({
-					item: item,
-					instance: targetData,
-					width: 0, height: 0,
-					left: 0, top: 0
-				});
-			};
-		};
-
-	},
-
-	refreshPositions: function(fast) {
-
-		//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
-		if(this.offsetParent && this.helper) {
-			this.offset.parent = this._getParentOffset();
-		}
-
-		for (var i = this.items.length - 1; i >= 0; i--){
-			var item = this.items[i];
-
-			//We ignore calculating positions of all connected containers when we're not over them
-			if(item.instance != this.currentContainer && this.currentContainer && item.item[0] != this.currentItem[0])
-				continue;
-
-			var t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
-
-			if (!fast) {
-				item.width = t.outerWidth();
-				item.height = t.outerHeight();
-			}
-
-			var p = t.offset();
-			item.left = p.left;
-			item.top = p.top;
-		};
-
-		if(this.options.custom && this.options.custom.refreshContainers) {
-			this.options.custom.refreshContainers.call(this);
-		} else {
-			for (var i = this.containers.length - 1; i >= 0; i--){
-				var p = this.containers[i].element.offset();
-				this.containers[i].containerCache.left = p.left;
-				this.containers[i].containerCache.top = p.top;
-				this.containers[i].containerCache.width	= this.containers[i].element.outerWidth();
-				this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
-			};
-		}
-
-		return this;
-	},
-
-	_createPlaceholder: function(that) {
-		that = that || this;
-		var o = that.options;
-
-		if(!o.placeholder || o.placeholder.constructor == String) {
-			var className = o.placeholder;
-			o.placeholder = {
-				element: function() {
-
-					var el = $(document.createElement(that.currentItem[0].nodeName))
-						.addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
-						.removeClass("ui-sortable-helper")[0];
-
-					if(!className)
-						el.style.visibility = "hidden";
-
-					return el;
-				},
-				update: function(container, p) {
-
-					// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
-					// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
-					if(className && !o.forcePlaceholderSize) return;
-
-					//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
-					if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css('paddingTop')||0, 10) - parseInt(that.currentItem.css('paddingBottom')||0, 10)); };
-					if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css('paddingLeft')||0, 10) - parseInt(that.currentItem.css('paddingRight')||0, 10)); };
-				}
-			};
-		}
-
-		//Create the placeholder
-		that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
-
-		//Append it after the actual current item
-		that.currentItem.after(that.placeholder);
-
-		//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
-		o.placeholder.update(that, that.placeholder);
-
-	},
-
-	_contactContainers: function(event) {
-
-		// get innermost container that intersects with item
-		var innermostContainer = null, innermostIndex = null;
-
-
-		for (var i = this.containers.length - 1; i >= 0; i--){
-
-			// never consider a container that's located within the item itself
-			if($.contains(this.currentItem[0], this.containers[i].element[0]))
-				continue;
-
-			if(this._intersectsWith(this.containers[i].containerCache)) {
-
-				// if we've already found a container and it's more "inner" than this, then continue
-				if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0]))
-					continue;
-
-				innermostContainer = this.containers[i];
-				innermostIndex = i;
-
-			} else {
-				// container doesn't intersect. trigger "out" event if necessary
-				if(this.containers[i].containerCache.over) {
-					this.containers[i]._trigger("out", event, this._uiHash(this));
-					this.containers[i].containerCache.over = 0;
-				}
-			}
-
-		}
-
-		// if no intersecting containers found, return
-		if(!innermostContainer) return;
-
-		// move the item into the container if it's not there already
-		if(this.containers.length === 1) {
-			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
-			this.containers[innermostIndex].containerCache.over = 1;
-		} else if(this.currentContainer != this.containers[innermostIndex]) {
-
-			//When entering a new container, we will find the item with the least distance and append our item near it
-			var dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[innermostIndex].floating ? 'left' : 'top'];
-			for (var j = this.items.length - 1; j >= 0; j--) {
-				if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) continue;
-				var cur = this.containers[innermostIndex].floating ? this.items[j].item.offset().left : this.items[j].item.offset().top;
-				if(Math.abs(cur - base) < dist) {
-					dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
-					this.direction = (cur - base > 0) ? 'down' : 'up';
-				}
-			}
-
-			if(!itemWithLeastDistance && !this.options.dropOnEmpty) //Check if dropOnEmpty is enabled
-				return;
-
-			this.currentContainer = this.containers[innermostIndex];
-			itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
-			this._trigger("change", event, this._uiHash());
-			this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
-
-			//Update the placeholder
-			this.options.placeholder.update(this.currentContainer, this.placeholder);
-
-			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
-			this.containers[innermostIndex].containerCache.over = 1;
-		}
-
-
-	},
-
-	_createHelper: function(event) {
-
-		var o = this.options;
-		var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper == 'clone' ? this.currentItem.clone() : this.currentItem);
-
-		if(!helper.parents('body').length) //Add the helper to the DOM if that didn't happen already
-			$(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
-
-		if(helper[0] == this.currentItem[0])
-			this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
-
-		if(helper[0].style.width == '' || o.forceHelperSize) helper.width(this.currentItem.width());
-		if(helper[0].style.height == '' || o.forceHelperSize) helper.height(this.currentItem.height());
-
-		return helper;
-
-	},
-
-	_adjustOffsetFromHelper: function(obj) {
-		if (typeof obj == 'string') {
-			obj = obj.split(' ');
-		}
-		if ($.isArray(obj)) {
-			obj = {left: +obj[0], top: +obj[1] || 0};
-		}
-		if ('left' in obj) {
-			this.offset.click.left = obj.left + this.margins.left;
-		}
-		if ('right' in obj) {
-			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
-		}
-		if ('top' in obj) {
-			this.offset.click.top = obj.top + this.margins.top;
-		}
-		if ('bottom' in obj) {
-			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
-		}
-	},
-
-	_getParentOffset: function() {
-
-
-		//Get the offsetParent and cache its position
-		this.offsetParent = this.helper.offsetParent();
-		var po = this.offsetParent.offset();
-
-		// This is a special case where we need to modify a offset calculated on start, since the following happened:
-		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
-		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
-		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
-		if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
-			po.left += this.scrollParent.scrollLeft();
-			po.top += this.scrollParent.scrollTop();
-		}
-
-		if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
-		|| (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
-			po = { top: 0, left: 0 };
-
-		return {
-			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
-			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
-		};
-
-	},
-
-	_getRelativeOffset: function() {
-
-		if(this.cssPosition == "relative") {
-			var p = this.currentItem.position();
-			return {
-				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
-				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
-			};
-		} else {
-			return { top: 0, left: 0 };
-		}
-
-	},
-
-	_cacheMargins: function() {
-		this.margins = {
-			left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
-			top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
-		};
-	},
-
-	_cacheHelperProportions: function() {
-		this.helperProportions = {
-			width: this.helper.outerWidth(),
-			height: this.helper.outerHeight()
-		};
-	},
-
-	_setContainment: function() {
-
-		var o = this.options;
-		if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
-		if(o.containment == 'document' || o.containment == 'window') this.containment = [
-			0 - this.offset.relative.left - this.offset.parent.left,
-			0 - this.offset.relative.top - this.offset.parent.top,
-			$(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
-			($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
-		];
-
-		if(!(/^(document|window|parent)$/).test(o.containment)) {
-			var ce = $(o.containment)[0];
-			var co = $(o.containment).offset();
-			var over = ($(ce).css("overflow") != 'hidden');
-
-			this.containment = [
-				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
-				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
-				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
-				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
-			];
-		}
-
-	},
-
-	_convertPositionTo: function(d, pos) {
-
-		if(!pos) pos = this.position;
-		var mod = d == "absolute" ? 1 : -1;
-		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
-
-		return {
-			top: (
-				pos.top																	// The absolute mouse position
-				+ this.offset.relative.top * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
-				+ this.offset.parent.top * mod											// The offsetParent's offset without borders (offset + border)
-				- ( ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
-			),
-			left: (
-				pos.left																// The absolute mouse position
-				+ this.offset.relative.left * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
-				+ this.offset.parent.left * mod											// The offsetParent's offset without borders (offset + border)
-				- ( ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
-			)
-		};
-
-	},
-
-	_generatePosition: function(event) {
-
-		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
-
-		// This is another very weird special case that only happens for relative elements:
-		// 1. If the css position is relative
-		// 2. and the scroll parent is the document or similar to the offset parent
-		// we have to refresh the relative offset during the scroll so there are no jumps
-		if(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) {
-			this.offset.relative = this._getRelativeOffset();
-		}
-
-		var pageX = event.pageX;
-		var pageY = event.pageY;
-
-		/*
-		 * - Position constraining -
-		 * Constrain the position to a mix of grid, containment.
-		 */
-
-		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
-
-			if(this.containment) {
-				if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left;
-				if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top;
-				if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left;
-				if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top;
-			}
-
-			if(o.grid) {
-				var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
-				pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
-
-				var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
-				pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
-			}
-
-		}
-
-		return {
-			top: (
-				pageY																// The absolute mouse position
-				- this.offset.click.top													// Click offset (relative to the element)
-				- this.offset.relative.top												// Only for relative positioned nodes: Relative offset from element to offset parent
-				- this.offset.parent.top												// The offsetParent's offset without borders (offset + border)
-				+ ( ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
-			),
-			left: (
-				pageX																// The absolute mouse position
-				- this.offset.click.left												// Click offset (relative to the element)
-				- this.offset.relative.left												// Only for relative positioned nodes: Relative offset from element to offset parent
-				- this.offset.parent.left												// The offsetParent's offset without borders (offset + border)
-				+ ( ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
-			)
-		};
-
-	},
-
-	_rearrange: function(event, i, a, hardRefresh) {
-
-		a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling));
-
-		//Various things done here to improve the performance:
-		// 1. we create a setTimeout, that calls refreshPositions
-		// 2. on the instance, we have a counter variable, that get's higher after every append
-		// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
-		// 4. this lets only the last addition to the timeout stack through
-		this.counter = this.counter ? ++this.counter : 1;
-		var counter = this.counter;
-
-    // Cause error when sort widgets on dashboard. Error: Object has no _delay method
-    //this._delay(function() {
-    //if(counter == this.counter) this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
-    //});
-
-	},
-
-	_clear: function(event, noPropagation) {
-
-		this.reverting = false;
-		// We delay all events that have to be triggered to after the point where the placeholder has been removed and
-		// everything else normalized again
-		var delayedTriggers = [];
-
-		// We first have to update the dom position of the actual currentItem
-		// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
-		if(!this._noFinalSort && this.currentItem.parent().length) this.placeholder.before(this.currentItem);
-		this._noFinalSort = null;
-
-		if(this.helper[0] == this.currentItem[0]) {
-			for(var i in this._storedCSS) {
-				if(this._storedCSS[i] == 'auto' || this._storedCSS[i] == 'static') this._storedCSS[i] = '';
-			}
-			this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
-		} else {
-			this.currentItem.show();
-		}
-
-		if(this.fromOutside && !noPropagation) delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
-		if((this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !noPropagation) delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
-
-		// Check if the items Container has Changed and trigger appropriate
-		// events.
-		if (this !== this.currentContainer) {
-			if(!noPropagation) {
-				delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
-				delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); };  }).call(this, this.currentContainer));
-				delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this));  }; }).call(this, this.currentContainer));
-			}
-		}
-
-
-		//Post events to containers
-		for (var i = this.containers.length - 1; i >= 0; i--){
-			if(!noPropagation) delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
-			if(this.containers[i].containerCache.over) {
-				delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
-				this.containers[i].containerCache.over = 0;
-			}
-		}
-
-		//Do what was originally in plugins
-		if(this._storedCursor) $('body').css("cursor", this._storedCursor); //Reset cursor
-		if(this._storedOpacity) this.helper.css("opacity", this._storedOpacity); //Reset opacity
-		if(this._storedZIndex) this.helper.css("zIndex", this._storedZIndex == 'auto' ? '' : this._storedZIndex); //Reset z-index
-
-		this.dragging = false;
-		if(this.cancelHelperRemoval) {
-			if(!noPropagation) {
-				this._trigger("beforeStop", event, this._uiHash());
-				for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events
-				this._trigger("stop", event, this._uiHash());
-			}
-
-			this.fromOutside = false;
-			return false;
-		}
-
-		if(!noPropagation) this._trigger("beforeStop", event, this._uiHash());
-
-		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
-		this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
-
-		if(this.helper[0] != this.currentItem[0]) this.helper.remove(); this.helper = null;
-
-		if(!noPropagation) {
-			for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events
-			this._trigger("stop", event, this._uiHash());
-		}
-
-		this.fromOutside = false;
-		return true;
-
-	},
-
-	_trigger: function() {
-		if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
-			this.cancel();
-		}
-	},
-
-	_uiHash: function(_inst) {
-		var inst = _inst || this;
-		return {
-			helper: inst.helper,
-			placeholder: inst.placeholder || $([]),
-			position: inst.position,
-			originalPosition: inst.originalPosition,
-			offset: inst.positionAbs,
-			item: inst.currentItem,
-			sender: _inst ? _inst.element : null
-		};
-	}
-
-});
-
-})(jQuery);

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.ui.widget.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.ui.widget.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.ui.widget.js
deleted file mode 100644
index 544ce71..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.ui.widget.js
+++ /dev/null
@@ -1,276 +0,0 @@
-/*!
- * jQuery UI Widget 1.8.23
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Widget
- */
-(function ($, undefined) {
-
-// jQuery 1.4+
-  if ($.cleanData) {
-    var _cleanData = $.cleanData;
-    $.cleanData = function (elems) {
-      for (var i = 0, elem; (elem = elems[i]) != null; i++) {
-        try {
-          $(elem).triggerHandler("remove");
-          // http://bugs.jquery.com/ticket/8235
-        } catch (e) {
-        }
-      }
-      _cleanData(elems);
-    };
-  } else {
-    var _remove = $.fn.remove;
-    $.fn.remove = function (selector, keepData) {
-      return this.each(function () {
-        if (!keepData) {
-          if (!selector || $.filter(selector, [ this ]).length) {
-            $("*", this).add([ this ]).each(function () {
-              try {
-                $(this).triggerHandler("remove");
-                // http://bugs.jquery.com/ticket/8235
-              } catch (e) {
-              }
-            });
-          }
-        }
-        return _remove.call($(this), selector, keepData);
-      });
-    };
-  }
-
-  $.widget = function (name, base, prototype) {
-    var namespace = name.split(".")[ 0 ],
-      fullName;
-    name = name.split(".")[ 1 ];
-    fullName = namespace + "-" + name;
-
-    if (!prototype) {
-      prototype = base;
-      base = $.Widget;
-    }
-
-    // create selector for plugin
-    $.expr[ ":" ][ fullName ] = function (elem) {
-      return !!$.data(elem, name);
-    };
-
-    $[ namespace ] = $[ namespace ] || {};
-    $[ namespace ][ name ] = function (options, element) {
-      // allow instantiation without initializing for simple inheritance
-      if (arguments.length) {
-        this._createWidget(options, element);
-      }
-    };
-
-    var basePrototype = new base();
-    // we need to make the options hash a property directly on the new instance
-    // otherwise we'll modify the options hash on the prototype that we're
-    // inheriting from
-//	$.each( basePrototype, function( key, val ) {
-//		if ( $.isPlainObject(val) ) {
-//			basePrototype[ key ] = $.extend( {}, val );
-//		}
-//	});
-    basePrototype.options = $.extend(true, {}, basePrototype.options);
-    $[ namespace ][ name ].prototype = $.extend(true, basePrototype, {
-      namespace:namespace,
-      widgetName:name,
-      widgetEventPrefix:$[ namespace ][ name ].prototype.widgetEventPrefix || name,
-      widgetBaseClass:fullName
-    }, prototype);
-
-    $.widget.bridge(name, $[ namespace ][ name ]);
-  };
-
-  $.widget.bridge = function (name, object) {
-    $.fn[ name ] = function (options) {
-      var isMethodCall = typeof options === "string",
-        args = Array.prototype.slice.call(arguments, 1),
-        returnValue = this;
-
-      // allow multiple hashes to be passed on init
-      options = !isMethodCall && args.length ?
-        $.extend.apply(null, [ true, options ].concat(args)) :
-        options;
-
-      // prevent calls to internal methods
-      if (isMethodCall && options.charAt(0) === "_") {
-        return returnValue;
-      }
-
-      if (isMethodCall) {
-        this.each(function () {
-          var instance = $.data(this, name),
-            methodValue = instance && $.isFunction(instance[options]) ?
-              instance[ options ].apply(instance, args) :
-              instance;
-          // TODO: add this back in 1.9 and use $.error() (see #5972)
-//				if ( !instance ) {
-//					throw "cannot call methods on " + name + " prior to initialization; " +
-//						"attempted to call method '" + options + "'";
-//				}
-//				if ( !$.isFunction( instance[options] ) ) {
-//					throw "no such method '" + options + "' for " + name + " widget instance";
-//				}
-//				var methodValue = instance[ options ].apply( instance, args );
-          if (methodValue !== instance && methodValue !== undefined) {
-            returnValue = methodValue;
-            return false;
-          }
-        });
-      } else {
-        this.each(function () {
-          var instance = $.data(this, name);
-          if (instance) {
-            instance.option(options || {})._init();
-          } else {
-            $.data(this, name, new object(options, this));
-          }
-        });
-      }
-
-      return returnValue;
-    };
-  };
-
-  $.Widget = function (options, element) {
-    // allow instantiation without initializing for simple inheritance
-    if (arguments.length) {
-      this._createWidget(options, element);
-    }
-  };
-
-  $.Widget.prototype = {
-    widgetName:"widget",
-    widgetEventPrefix:"",
-    options:{
-      disabled:false
-    },
-    _createWidget:function (options, element) {
-      // $.widget.bridge stores the plugin instance, but we do it anyway
-      // so that it's stored even before the _create function runs
-      $.data(element, this.widgetName, this);
-      this.element = $(element);
-      this.options = $.extend(true, {},
-        this.options,
-        this._getCreateOptions(),
-        options);
-
-      var self = this;
-      this.element.bind("remove." + this.widgetName, function () {
-        self.destroy();
-      });
-
-      this._create();
-      this._trigger("create");
-      this._init();
-    },
-    _getCreateOptions:function () {
-      return $.metadata && $.metadata.get(this.element[0])[ this.widgetName ];
-    },
-    _create:function () {
-    },
-    _init:function () {
-    },
-
-    destroy:function () {
-      this.element
-        .unbind("." + this.widgetName)
-        .removeData(this.widgetName);
-      this.widget()
-        .unbind("." + this.widgetName)
-        .removeAttr("aria-disabled")
-        .removeClass(
-        this.widgetBaseClass + "-disabled " +
-          "ui-state-disabled");
-    },
-
-    widget:function () {
-      return this.element;
-    },
-
-    option:function (key, value) {
-      var options = key;
-
-      if (arguments.length === 0) {
-        // don't return a reference to the internal hash
-        return $.extend({}, this.options);
-      }
-
-      if (typeof key === "string") {
-        if (value === undefined) {
-          return this.options[ key ];
-        }
-        options = {};
-        options[ key ] = value;
-      }
-
-      this._setOptions(options);
-
-      return this;
-    },
-    _setOptions:function (options) {
-      var self = this;
-      $.each(options, function (key, value) {
-        self._setOption(key, value);
-      });
-
-      return this;
-    },
-    _setOption:function (key, value) {
-      this.options[ key ] = value;
-
-      if (key === "disabled") {
-        this.widget()
-          [ value ? "addClass" : "removeClass"](
-          this.widgetBaseClass + "-disabled" + " " +
-            "ui-state-disabled")
-          .attr("aria-disabled", value);
-      }
-
-      return this;
-    },
-
-    enable:function () {
-      return this._setOption("disabled", false);
-    },
-    disable:function () {
-      return this._setOption("disabled", true);
-    },
-
-    _trigger:function (type, event, data) {
-      var prop, orig,
-        callback = this.options[ type ];
-
-      data = data || {};
-      event = $.Event(event);
-      event.type = ( type === this.widgetEventPrefix ?
-        type :
-        this.widgetEventPrefix + type ).toLowerCase();
-      // the original event may come from any element
-      // so we need to reset the target on the new event
-      event.target = this.element[ 0 ];
-
-      // copy original event properties over to the new event
-      orig = event.originalEvent;
-      if (orig) {
-        for (prop in orig) {
-          if (!( prop in event )) {
-            event[ prop ] = orig[ prop ];
-          }
-        }
-      }
-
-      this.element.trigger(event, data);
-
-      return !( $.isFunction(callback) &&
-        callback.call(this.element[0], event, data) === false ||
-        event.isDefaultPrevented() );
-    }
-  };
-
-})(jQuery);


[03/42] ambari git commit: AMBARI-21290. Grafana Yarn Queue dashboard is not working (JaySenSharma via vsubramanian)

Posted by rl...@apache.org.
AMBARI-21290. Grafana Yarn Queue dashboard is not working (JaySenSharma via vsubramanian)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/845eb86c
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/845eb86c
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/845eb86c

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 845eb86c24a5b4a7d4735d50715522bd8795eff4
Parents: 6305fb6
Author: Vivek Ratnavel Subramanian <vi...@gmail.com>
Authored: Thu Jun 22 12:57:27 2017 -0700
Committer: Vivek Ratnavel Subramanian <vi...@gmail.com>
Committed: Thu Jun 22 12:57:27 2017 -0700

----------------------------------------------------------------------
 .../ambari-metrics-grafana/ambari-metrics/datasource.js         | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/845eb86c/ambari-metrics/ambari-metrics-grafana/ambari-metrics/datasource.js
----------------------------------------------------------------------
diff --git a/ambari-metrics/ambari-metrics-grafana/ambari-metrics/datasource.js b/ambari-metrics/ambari-metrics-grafana/ambari-metrics/datasource.js
index 72e64e2..b4a339e 100644
--- a/ambari-metrics/ambari-metrics-grafana/ambari-metrics/datasource.js
+++ b/ambari-metrics/ambari-metrics-grafana/ambari-metrics/datasource.js
@@ -275,13 +275,14 @@ define([
             );
           };
           var getYarnAppIdData = function(target) {
-            var precision = target.precision === 'default' || typeof target.precision == 'undefined'  ? '' : '&precision=' 
+            var precision = target.precision === 'default' || typeof target.precision == 'undefined'  ? '' : '&precision='
             + target.precision;
+            var instanceId = typeof target.templatedCluster == 'undefined'  ? '' : '&instanceId=' + target.templatedCluster;
             var metricAggregator = target.aggregator === "none" ? '' : '._' + target.aggregator;
             var metricTransform = !target.transform || target.transform === "none" ? '' : '._' + target.transform;
             var seriesAggregator = !target.seriesAggregator || target.seriesAggregator === "none" ? '' : '&seriesAggregateFunction=' + target.seriesAggregator;
             return self.doAmbariRequest({ url: '/ws/v1/timeline/metrics?metricNames=' + target.queue + metricTransform
-              + metricAggregator + '&appId=resourcemanager&startTime=' + + '&instanceId=' + target.templatedCluster + from +
+              + metricAggregator + '&appId=resourcemanager' + instanceId + '&startTime=' + from +
               '&endTime=' + to + precision + seriesAggregator }).then(
               getMetricsData(target)
             );


[37/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/README.md
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/README.md b/contrib/views/slider/src/main/resources/ui/README.md
deleted file mode 100755
index 60ab1378b..0000000
--- a/contrib/views/slider/src/main/resources/ui/README.md
+++ /dev/null
@@ -1,122 +0,0 @@
-# Brunch with Ember Reloaded
-
-![build status](https://travis-ci.org/gcollazo/brunch-with-ember-reloaded.png)
-
-A [Brunch](http://brunch.io) skeleton for creating ambitious web applications using [Ember.js](http://emberjs.com). Based on the official Ember [Starter Kit](https://github.com/emberjs/starter-kit/archive/master.zip).
-
-## Demo
-
-I built a demo app using this skeleton, based on the [Building an App with Ember.js](http://www.youtube.com/watch?v=Ga99hMi7wfY) video by [Tom Dale](http://twitter.com/tomdale).
-
-**Demo**: [ember-bloggr](http://dev.gcollazo.com/ember-bloggr)
-
-**Source**: [https://github.com/gcollazo/ember-bloggr](https://github.com/gcollazo/ember-bloggr)
-
-## Versions
-- [Ember 1.5.1+pre.ff8c6bbb](http://emberjs.com)
-- [Ember Data 1.0.0-beta.7+canary.238bb5ce](https://github.com/emberjs/data)
-- [Handlebars 1.3.0](http://handlebarsjs.com)
-- [jQuery v2.0.3](http://jquery.com)
-- [HTML5 Boilerplate v4.3.0](http://html5boilerplate.com)
-
-## Other versions of this skeleton
-
-- [ES6](https://github.com/gcollazo/brunch-with-ember-reloaded/tree/es6): Experimental version using ES6 module syntax.
-- [CoffeeScript](https://github.com/gcollazo/brunch-with-ember-reloaded/tree/coffeescript)
-
-
-## Getting started
-
-Before using brunch-with-ember-reloaded you will need to install [Brunch](http://brunch.io/).
-
-```
-brunch new gh:gcollazo/brunch-with-ember-reloaded <appname>
-cd <appname>
-brunch watch -s
-```
-Open [http://localhost:3333](http://localhost:3333) on your browser.
-
-## Generators
-
-This skeleton makes use of [scaffolt](https://github.com/paulmillr/scaffolt#readme) generators to help you create common files quicker. To use first install scaffolt globally with `npm install -g scaffolt`. Then you can use the following command to generate files.
-
-```
-scaffolt model <name>             →    app/models/Name.js
-scaffolt view <name>              →    app/views/NameView.js
-scaffolt controller <name>        →    app/controllers/NameController.js
-scaffolt arraycontroller <name>   →    app/controllers/NamesController.js
-scaffolt route <name>             →    app/routes/NameRoute.js
-scaffolt template <name>          →    app/templatesname.hbs
-scaffolt component <name>         →    app/components/NameComponent.js
-                                       app/templates/components/name.hbs
-```
-
-There are more commands you can do with scaffolt and also instruction on how to create your own generators, so make sure you check out the [docs](https://github.com/paulmillr/scaffolt#readme).
-
-## Testing
-
-To run you will need [Karma](https://github.com/karma-runner) you will need to install [phantomjs](https://github.com/ariya/phantomjs). If you want to run your tests on other browsers consult the Karma docs.
-
-```
-brew update && brew install phantomjs
-```
-
-To run tests continiously as you write code and tests (for now) you must open two terminal windows.
-
-```
-brunch watch -s
-```
-
-```
-karma start
-```
-
-## Building for production
-This skeleton supports the production versions of ember and ember-data. Just build using the --production flags.
-
-```
-brunch build --production
-```
-
-You can also have modules load only when you are on a specific environment (production / development). Just add the modules you want loaded to the corresponging subdirectory of the `envs` top level directory. All modules will be imported by the module `'config/env'`.
-
-```js
-var myEnvVars = require('config/env');
-myEnvVars.envFileName.property;
-```
-
-
-## Updating Ember
-
-To updated ember.js, ember-data.js and handlebars.js to the latest stable versions, just run this command on the project root.
-
-```
-npm run update:ember
-```
-
-## Updating Skeleton
-
-This command will replace `package.json`, `README.md`, `config.js`, `karma.conf.js` and the `generators` directory with the latest version from the GitHub repository.
-
-```
-npm run update:skeleton
-npm install
-```
-If you want to update an older version of the skeleton which doesn't have support for the update:skeleton command you can get the `setup.js` by running:
-
-```
-curl https://raw.github.com/gcollazo/brunch-with-ember-reloaded/master/setup.js > setup.js
-node setup.js update:skeleton
-```
-
-## License
-
-All of brunch-with-ember-reloaded is licensed under the MIT license.
-
-Copyright (c) 2013 Giovanni Collazo
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/404.html
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/404.html b/contrib/views/slider/src/main/resources/ui/app/assets/404.html
deleted file mode 100755
index c21980f..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/404.html
+++ /dev/null
@@ -1,175 +0,0 @@
-<!--
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
--->
-
-<!DOCTYPE html>
-<html lang="en">
-    <head>
-        <meta charset="utf-8">
-        <title>Page Not Found :(</title>
-        <style>
-            ::-moz-selection {
-                background: #b3d4fc;
-                text-shadow: none;
-            }
-
-            ::selection {
-                background: #b3d4fc;
-                text-shadow: none;
-            }
-
-            html {
-                padding: 30px 10px;
-                font-size: 20px;
-                line-height: 1.4;
-                color: #737373;
-                background: #f0f0f0;
-                -webkit-text-size-adjust: 100%;
-                -ms-text-size-adjust: 100%;
-            }
-
-            html,
-            input {
-                font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-            }
-
-            body {
-                max-width: 500px;
-                _width: 500px;
-                padding: 30px 20px 50px;
-                border: 1px solid #b3b3b3;
-                border-radius: 4px;
-                margin: 0 auto;
-                box-shadow: 0 1px 10px #a7a7a7, inset 0 1px 0 #fff;
-                background: #fcfcfc;
-            }
-
-            h1 {
-                margin: 0 10px;
-                font-size: 50px;
-                text-align: center;
-            }
-
-            h1 span {
-                color: #bbb;
-            }
-
-            h3 {
-                margin: 1.5em 0 0.5em;
-            }
-
-            p {
-                margin: 1em 0;
-            }
-
-            ul {
-                padding: 0 0 0 40px;
-                margin: 1em 0;
-            }
-
-            .container {
-                max-width: 380px;
-                _width: 380px;
-                margin: 0 auto;
-            }
-
-            /* google search */
-
-            #goog-fixurl ul {
-                list-style: none;
-                padding: 0;
-                margin: 0;
-            }
-
-            #goog-fixurl form {
-                margin: 0;
-            }
-
-            #goog-wm-qt,
-            #goog-wm-sb {
-                border: 1px solid #bbb;
-                font-size: 16px;
-                line-height: normal;
-                vertical-align: top;
-                color: #444;
-                border-radius: 2px;
-            }
-
-            #goog-wm-qt {
-                width: 220px;
-                height: 20px;
-                padding: 5px;
-                margin: 5px 10px 0 0;
-                box-shadow: inset 0 1px 1px #ccc;
-            }
-
-            #goog-wm-sb {
-                display: inline-block;
-                height: 32px;
-                padding: 0 10px;
-                margin: 5px 0 0;
-                white-space: nowrap;
-                cursor: pointer;
-                background-color: #f5f5f5;
-                background-image: -webkit-linear-gradient(rgba(255,255,255,0), #f1f1f1);
-                background-image: -moz-linear-gradient(rgba(255,255,255,0), #f1f1f1);
-                background-image: -ms-linear-gradient(rgba(255,255,255,0), #f1f1f1);
-                background-image: -o-linear-gradient(rgba(255,255,255,0), #f1f1f1);
-                -webkit-appearance: none;
-                -moz-appearance: none;
-                appearance: none;
-                *overflow: visible;
-                *display: inline;
-                *zoom: 1;
-            }
-
-            #goog-wm-sb:hover,
-            #goog-wm-sb:focus {
-                border-color: #aaa;
-                box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
-                background-color: #f8f8f8;
-            }
-
-            #goog-wm-qt:hover,
-            #goog-wm-qt:focus {
-                border-color: #105cb6;
-                outline: 0;
-                color: #222;
-            }
-
-            input::-moz-focus-inner {
-                padding: 0;
-                border: 0;
-            }
-        </style>
-    </head>
-    <body>
-        <div class="container">
-            <h1>Not found <span>:(</span></h1>
-            <p>Sorry, but the page you were trying to view does not exist.</p>
-            <p>It looks like this was the result of either:</p>
-            <ul>
-                <li>a mistyped address</li>
-                <li>an out-of-date link</li>
-            </ul>
-            <script>
-                var GOOG_FIXURL_LANG = (navigator.language || '').slice(0,2),GOOG_FIXURL_SITE = location.host;
-            </script>
-            <script src="//linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script>
-        </div>
-    </body>
-</html>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/apple-touch-icon-precomposed.png
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/apple-touch-icon-precomposed.png b/contrib/views/slider/src/main/resources/ui/app/assets/apple-touch-icon-precomposed.png
deleted file mode 100755
index 1ea85ed..0000000
Binary files a/contrib/views/slider/src/main/resources/ui/app/assets/apple-touch-icon-precomposed.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/crossdomain.xml
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/crossdomain.xml b/contrib/views/slider/src/main/resources/ui/app/assets/crossdomain.xml
deleted file mode 100755
index b1aa0b3..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/crossdomain.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
-<cross-domain-policy>
-    <!-- Read this: www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html -->
-
-    <!-- Most restrictive policy: -->
-    <site-control permitted-cross-domain-policies="none"/>
-
-    <!-- Least restrictive policy: -->
-    <!--
-    <site-control permitted-cross-domain-policies="all"/>
-    <allow-access-from domain="*" to-ports="*" secure="false"/>
-    <allow-http-request-headers-from domain="*" headers="*" secure="false"/>
-    -->
-</cross-domain-policy>


[07/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/styles/cubism.css
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/styles/cubism.css b/contrib/views/slider/src/main/resources/ui/vendor/styles/cubism.css
deleted file mode 100644
index b572148..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/styles/cubism.css
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * D3  visualization components 
- * Styles for Dag viewer and Sankey diagram
- */
-.wfdag {
-  width: 100%;
-}
-
-#dag_viewer .axis path,
-#dag_viewer .axis line {
-  fill: none;
-  stroke: #000;
-  shape-rendering: crispEdges;
-}
-
-#dag_viewer line.link,
-#dag_viewer path.link {
-  fill: none;
-  stroke: #666;
-  stroke-width: 2.5px;
-}
-
-#dag_viewer line.link.finished,
-#dag_viewer path.link.finished {
-  stroke: #444;
-}
-
-#dag_viewer marker#finished {
-  fill: #444;
-}
-
-#dag_viewer marker#circle {
-  fill: #666;
-  stroke: none;
-}
-
-#dag_viewer line.source.mark,
-#dag_viewer line.target.mark {
-  stroke: #666;
-  stroke-width: 2.5px;
-}
-
-#dag_viewer rect {
-  fill: #ccc;
-  stroke: #333;
-  stroke-width: 1px;
-}
-
-#dag_viewer rect.finished {
-  fill: green;
-  fill-opacity: 0.8;
-}
-
-#dag_viewer text.joblabel {
-  pointer-events: none;
-  text-anchor: middle;
-}
-
-#dag_viewer text.axislabel {
-  pointer-events: none;
-  text-anchor: middle;
-}
-
-#dag_viewer text.shadow {
-  stroke: #fff;
-  stroke-width: 3px;
-  stroke-opacity: .8;
-}
-
-.map, .shuffle, .reduce {
-  fill-opacity: 0.8;
-  stroke-width: 2px;
-}
-
-.allmap, .allshuffle, .allreduce {
-  fill: none;
-  stroke-width: 2px;
-}
-
-.y.axis {
-  font-size: 10px;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/styles/font-awesome-ie7.css
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/styles/font-awesome-ie7.css b/contrib/views/slider/src/main/resources/ui/vendor/styles/font-awesome-ie7.css
deleted file mode 100644
index 17f0776..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/styles/font-awesome-ie7.css
+++ /dev/null
@@ -1,1203 +0,0 @@
-/*!
- *  Font Awesome 3.2.1
- *  the iconic font designed for Bootstrap
- *  ------------------------------------------------------------------------------
- *  The full suite of pictographic icons, examples, and documentation can be
- *  found at http://fontawesome.io.  Stay up to date on Twitter at
- *  http://twitter.com/fontawesome.
- *
- *  License
- *  ------------------------------------------------------------------------------
- *  - The Font Awesome font is licensed under SIL OFL 1.1 -
- *    http://scripts.sil.org/OFL
- *  - Font Awesome CSS, LESS, and SASS files are licensed under MIT License -
- *    http://opensource.org/licenses/mit-license.html
- *  - Font Awesome documentation licensed under CC BY 3.0 -
- *    http://creativecommons.org/licenses/by/3.0/
- *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:
- *    "Font Awesome by Dave Gandy - http://fontawesome.io"
- *
- *  Author - Dave Gandy
- *  ------------------------------------------------------------------------------
- *  Email: dave@fontawesome.io
- *  Twitter: http://twitter.com/davegandy
- *  Work: Lead Product Designer @ Kyruus - http://kyruus.com
- */
-.icon-large {
-  font-size: 1.3333333333333333em;
-  margin-top: -4px;
-  padding-top: 3px;
-  margin-bottom: -4px;
-  padding-bottom: 3px;
-  vertical-align: middle;
-}
-.nav [class^="icon-"],
-.nav [class*=" icon-"] {
-  vertical-align: inherit;
-  margin-top: -4px;
-  padding-top: 3px;
-  margin-bottom: -4px;
-  padding-bottom: 3px;
-}
-.nav [class^="icon-"].icon-large,
-.nav [class*=" icon-"].icon-large {
-  vertical-align: -25%;
-}
-.nav-pills [class^="icon-"].icon-large,
-.nav-tabs [class^="icon-"].icon-large,
-.nav-pills [class*=" icon-"].icon-large,
-.nav-tabs [class*=" icon-"].icon-large {
-  line-height: .75em;
-  margin-top: -7px;
-  padding-top: 5px;
-  margin-bottom: -5px;
-  padding-bottom: 4px;
-}
-.btn [class^="icon-"].pull-left,
-.btn [class*=" icon-"].pull-left,
-.btn [class^="icon-"].pull-right,
-.btn [class*=" icon-"].pull-right {
-  vertical-align: inherit;
-}
-.btn [class^="icon-"].icon-large,
-.btn [class*=" icon-"].icon-large {
-  margin-top: -0.5em;
-}
-a [class^="icon-"],
-a [class*=" icon-"] {
-  cursor: pointer;
-}
-.icon-glass {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf000;');
-}
-.icon-music {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf001;');
-}
-.icon-search {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf002;');
-}
-.icon-envelope-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf003;');
-}
-.icon-heart {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf004;');
-}
-.icon-star {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf005;');
-}
-.icon-star-empty {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf006;');
-}
-.icon-user {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf007;');
-}
-.icon-film {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf008;');
-}
-.icon-th-large {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf009;');
-}
-.icon-th {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00a;');
-}
-.icon-th-list {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00b;');
-}
-.icon-ok {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00c;');
-}
-.icon-remove {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00d;');
-}
-.icon-zoom-in {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00e;');
-}
-.icon-zoom-out {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf010;');
-}
-.icon-off {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf011;');
-}
-.icon-power-off {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf011;');
-}
-.icon-signal {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf012;');
-}
-.icon-cog {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf013;');
-}
-.icon-gear {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf013;');
-}
-.icon-trash {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf014;');
-}
-.icon-home {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf015;');
-}
-.icon-file-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf016;');
-}
-.icon-time {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf017;');
-}
-.icon-road {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf018;');
-}
-.icon-download-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf019;');
-}
-.icon-download {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01a;');
-}
-.icon-upload {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01b;');
-}
-.icon-inbox {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01c;');
-}
-.icon-play-circle {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01d;');
-}
-.icon-repeat {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01e;');
-}
-.icon-rotate-right {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01e;');
-}
-.icon-refresh {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf021;');
-}
-.icon-list-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf022;');
-}
-.icon-lock {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf023;');
-}
-.icon-flag {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf024;');
-}
-.icon-headphones {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf025;');
-}
-.icon-volume-off {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf026;');
-}
-.icon-volume-down {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf027;');
-}
-.icon-volume-up {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf028;');
-}
-.icon-qrcode {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf029;');
-}
-.icon-barcode {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02a;');
-}
-.icon-tag {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02b;');
-}
-.icon-tags {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02c;');
-}
-.icon-book {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02d;');
-}
-.icon-bookmark {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02e;');
-}
-.icon-print {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02f;');
-}
-.icon-camera {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf030;');
-}
-.icon-font {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf031;');
-}
-.icon-bold {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf032;');
-}
-.icon-italic {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf033;');
-}
-.icon-text-height {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf034;');
-}
-.icon-text-width {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf035;');
-}
-.icon-align-left {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf036;');
-}
-.icon-align-center {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf037;');
-}
-.icon-align-right {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf038;');
-}
-.icon-align-justify {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf039;');
-}
-.icon-list {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03a;');
-}
-.icon-indent-left {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03b;');
-}
-.icon-indent-right {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03c;');
-}
-.icon-facetime-video {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03d;');
-}
-.icon-picture {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03e;');
-}
-.icon-pencil {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf040;');
-}
-.icon-map-marker {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf041;');
-}
-.icon-adjust {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf042;');
-}
-.icon-tint {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf043;');
-}
-.icon-edit {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf044;');
-}
-.icon-share {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf045;');
-}
-.icon-check {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf046;');
-}
-.icon-move {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf047;');
-}
-.icon-step-backward {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf048;');
-}
-.icon-fast-backward {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf049;');
-}
-.icon-backward {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04a;');
-}
-.icon-play {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04b;');
-}
-.icon-pause {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04c;');
-}
-.icon-stop {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04d;');
-}
-.icon-forward {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04e;');
-}
-.icon-fast-forward {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf050;');
-}
-.icon-step-forward {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf051;');
-}
-.icon-eject {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf052;');
-}
-.icon-chevron-left {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf053;');
-}
-.icon-chevron-right {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf054;');
-}
-.icon-plus-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf055;');
-}
-.icon-minus-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf056;');
-}
-.icon-remove-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf057;');
-}
-.icon-ok-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf058;');
-}
-.icon-question-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf059;');
-}
-.icon-info-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05a;');
-}
-.icon-screenshot {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05b;');
-}
-.icon-remove-circle {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05c;');
-}
-.icon-ok-circle {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05d;');
-}
-.icon-ban-circle {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05e;');
-}
-.icon-arrow-left {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf060;');
-}
-.icon-arrow-right {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf061;');
-}
-.icon-arrow-up {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf062;');
-}
-.icon-arrow-down {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf063;');
-}
-.icon-share-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf064;');
-}
-.icon-mail-forward {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf064;');
-}
-.icon-resize-full {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf065;');
-}
-.icon-resize-small {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf066;');
-}
-.icon-plus {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf067;');
-}
-.icon-minus {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf068;');
-}
-.icon-asterisk {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf069;');
-}
-.icon-exclamation-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06a;');
-}
-.icon-gift {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06b;');
-}
-.icon-leaf {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06c;');
-}
-.icon-fire {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06d;');
-}
-.icon-eye-open {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06e;');
-}
-.icon-eye-close {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf070;');
-}
-.icon-warning-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf071;');
-}
-.icon-plane {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf072;');
-}
-.icon-calendar {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf073;');
-}
-.icon-random {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf074;');
-}
-.icon-comment {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf075;');
-}
-.icon-magnet {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf076;');
-}
-.icon-chevron-up {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf077;');
-}
-.icon-chevron-down {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf078;');
-}
-.icon-retweet {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf079;');
-}
-.icon-shopping-cart {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07a;');
-}
-.icon-folder-close {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07b;');
-}
-.icon-folder-open {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07c;');
-}
-.icon-resize-vertical {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07d;');
-}
-.icon-resize-horizontal {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07e;');
-}
-.icon-bar-chart {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf080;');
-}
-.icon-twitter-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf081;');
-}
-.icon-facebook-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf082;');
-}
-.icon-camera-retro {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf083;');
-}
-.icon-key {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf084;');
-}
-.icon-cogs {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf085;');
-}
-.icon-gears {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf085;');
-}
-.icon-comments {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf086;');
-}
-.icon-thumbs-up-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf087;');
-}
-.icon-thumbs-down-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf088;');
-}
-.icon-star-half {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf089;');
-}
-.icon-heart-empty {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08a;');
-}
-.icon-signout {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08b;');
-}
-.icon-linkedin-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08c;');
-}
-.icon-pushpin {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08d;');
-}
-.icon-external-link {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08e;');
-}
-.icon-signin {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf090;');
-}
-.icon-trophy {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf091;');
-}
-.icon-github-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf092;');
-}
-.icon-upload-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf093;');
-}
-.icon-lemon {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf094;');
-}
-.icon-phone {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf095;');
-}
-.icon-check-empty {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf096;');
-}
-.icon-unchecked {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf096;');
-}
-.icon-bookmark-empty {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf097;');
-}
-.icon-phone-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf098;');
-}
-.icon-twitter {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf099;');
-}
-.icon-facebook {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09a;');
-}
-.icon-github {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09b;');
-}
-.icon-unlock {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09c;');
-}
-.icon-credit-card {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09d;');
-}
-.icon-rss {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09e;');
-}
-.icon-hdd {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a0;');
-}
-.icon-bullhorn {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a1;');
-}
-.icon-bell {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a2;');
-}
-.icon-certificate {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a3;');
-}
-.icon-hand-right {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a4;');
-}
-.icon-hand-left {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a5;');
-}
-.icon-hand-up {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a6;');
-}
-.icon-hand-down {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a7;');
-}
-.icon-circle-arrow-left {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a8;');
-}
-.icon-circle-arrow-right {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a9;');
-}
-.icon-circle-arrow-up {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0aa;');
-}
-.icon-circle-arrow-down {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ab;');
-}
-.icon-globe {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ac;');
-}
-.icon-wrench {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ad;');
-}
-.icon-tasks {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ae;');
-}
-.icon-filter {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b0;');
-}
-.icon-briefcase {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b1;');
-}
-.icon-fullscreen {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b2;');
-}
-.icon-group {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c0;');
-}
-.icon-link {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c1;');
-}
-.icon-cloud {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c2;');
-}
-.icon-beaker {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c3;');
-}
-.icon-cut {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c4;');
-}
-.icon-copy {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c5;');
-}
-.icon-paper-clip {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c6;');
-}
-.icon-paperclip {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c6;');
-}
-.icon-save {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c7;');
-}
-.icon-sign-blank {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c8;');
-}
-.icon-reorder {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c9;');
-}
-.icon-list-ul {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ca;');
-}
-.icon-list-ol {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cb;');
-}
-.icon-strikethrough {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cc;');
-}
-.icon-underline {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cd;');
-}
-.icon-table {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ce;');
-}
-.icon-magic {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d0;');
-}
-.icon-truck {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d1;');
-}
-.icon-pinterest {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d2;');
-}
-.icon-pinterest-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d3;');
-}
-.icon-google-plus-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d4;');
-}
-.icon-google-plus {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d5;');
-}
-.icon-money {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d6;');
-}
-.icon-caret-down {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d7;');
-}
-.icon-caret-up {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d8;');
-}
-.icon-caret-left {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d9;');
-}
-.icon-caret-right {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0da;');
-}
-.icon-columns {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0db;');
-}
-.icon-sort {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0dc;');
-}
-.icon-sort-down {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0dd;');
-}
-.icon-sort-up {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0de;');
-}
-.icon-envelope {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e0;');
-}
-.icon-linkedin {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e1;');
-}
-.icon-undo {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e2;');
-}
-.icon-rotate-left {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e2;');
-}
-.icon-legal {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e3;');
-}
-.icon-dashboard {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e4;');
-}
-.icon-comment-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e5;');
-}
-.icon-comments-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e6;');
-}
-.icon-bolt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e7;');
-}
-.icon-sitemap {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e8;');
-}
-.icon-umbrella {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e9;');
-}
-.icon-paste {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ea;');
-}
-.icon-lightbulb {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0eb;');
-}
-.icon-exchange {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ec;');
-}
-.icon-cloud-download {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ed;');
-}
-.icon-cloud-upload {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ee;');
-}
-.icon-user-md {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f0;');
-}
-.icon-stethoscope {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f1;');
-}
-.icon-suitcase {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f2;');
-}
-.icon-bell-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f3;');
-}
-.icon-coffee {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f4;');
-}
-.icon-food {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f5;');
-}
-.icon-file-text-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f6;');
-}
-.icon-building {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f7;');
-}
-.icon-hospital {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f8;');
-}
-.icon-ambulance {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f9;');
-}
-.icon-medkit {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fa;');
-}
-.icon-fighter-jet {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fb;');
-}
-.icon-beer {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fc;');
-}
-.icon-h-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fd;');
-}
-.icon-plus-sign-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fe;');
-}
-.icon-double-angle-left {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf100;');
-}
-.icon-double-angle-right {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf101;');
-}
-.icon-double-angle-up {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf102;');
-}
-.icon-double-angle-down {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf103;');
-}
-.icon-angle-left {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf104;');
-}
-.icon-angle-right {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf105;');
-}
-.icon-angle-up {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf106;');
-}
-.icon-angle-down {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf107;');
-}
-.icon-desktop {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf108;');
-}
-.icon-laptop {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf109;');
-}
-.icon-tablet {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10a;');
-}
-.icon-mobile-phone {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10b;');
-}
-.icon-circle-blank {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10c;');
-}
-.icon-quote-left {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10d;');
-}
-.icon-quote-right {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10e;');
-}
-.icon-spinner {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf110;');
-}
-.icon-circle {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf111;');
-}
-.icon-reply {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf112;');
-}
-.icon-mail-reply {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf112;');
-}
-.icon-github-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf113;');
-}
-.icon-folder-close-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf114;');
-}
-.icon-folder-open-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf115;');
-}
-.icon-expand-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf116;');
-}
-.icon-collapse-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf117;');
-}
-.icon-smile {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf118;');
-}
-.icon-frown {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf119;');
-}
-.icon-meh {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11a;');
-}
-.icon-gamepad {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11b;');
-}
-.icon-keyboard {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11c;');
-}
-.icon-flag-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11d;');
-}
-.icon-flag-checkered {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11e;');
-}
-.icon-terminal {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf120;');
-}
-.icon-code {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf121;');
-}
-.icon-reply-all {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf122;');
-}
-.icon-mail-reply-all {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf122;');
-}
-.icon-star-half-empty {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf123;');
-}
-.icon-star-half-full {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf123;');
-}
-.icon-location-arrow {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf124;');
-}
-.icon-crop {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf125;');
-}
-.icon-code-fork {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf126;');
-}
-.icon-unlink {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf127;');
-}
-.icon-question {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf128;');
-}
-.icon-info {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf129;');
-}
-.icon-exclamation {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12a;');
-}
-.icon-superscript {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12b;');
-}
-.icon-subscript {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12c;');
-}
-.icon-eraser {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12d;');
-}
-.icon-puzzle-piece {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12e;');
-}
-.icon-microphone {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf130;');
-}
-.icon-microphone-off {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf131;');
-}
-.icon-shield {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf132;');
-}
-.icon-calendar-empty {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf133;');
-}
-.icon-fire-extinguisher {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf134;');
-}
-.icon-rocket {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf135;');
-}
-.icon-maxcdn {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf136;');
-}
-.icon-chevron-sign-left {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf137;');
-}
-.icon-chevron-sign-right {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf138;');
-}
-.icon-chevron-sign-up {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf139;');
-}
-.icon-chevron-sign-down {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13a;');
-}
-.icon-html5 {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13b;');
-}
-.icon-css3 {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13c;');
-}
-.icon-anchor {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13d;');
-}
-.icon-unlock-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13e;');
-}
-.icon-bullseye {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf140;');
-}
-.icon-ellipsis-horizontal {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf141;');
-}
-.icon-ellipsis-vertical {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf142;');
-}
-.icon-rss-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf143;');
-}
-.icon-play-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf144;');
-}
-.icon-ticket {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf145;');
-}
-.icon-minus-sign-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf146;');
-}
-.icon-check-minus {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf147;');
-}
-.icon-level-up {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf148;');
-}
-.icon-level-down {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf149;');
-}
-.icon-check-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14a;');
-}
-.icon-edit-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14b;');
-}
-.icon-external-link-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14c;');
-}
-.icon-share-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14d;');
-}
-.icon-compass {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14e;');
-}
-.icon-collapse {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf150;');
-}
-.icon-collapse-top {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf151;');
-}
-.icon-expand {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf152;');
-}
-.icon-eur {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf153;');
-}
-.icon-euro {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf153;');
-}
-.icon-gbp {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf154;');
-}
-.icon-usd {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf155;');
-}
-.icon-dollar {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf155;');
-}
-.icon-inr {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf156;');
-}
-.icon-rupee {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf156;');
-}
-.icon-jpy {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf157;');
-}
-.icon-yen {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf157;');
-}
-.icon-cny {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf158;');
-}
-.icon-renminbi {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf158;');
-}
-.icon-krw {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf159;');
-}
-.icon-won {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf159;');
-}
-.icon-btc {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15a;');
-}
-.icon-bitcoin {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15a;');
-}
-.icon-file {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15b;');
-}
-.icon-file-text {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15c;');
-}
-.icon-sort-by-alphabet {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15d;');
-}
-.icon-sort-by-alphabet-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15e;');
-}
-.icon-sort-by-attributes {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf160;');
-}
-.icon-sort-by-attributes-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf161;');
-}
-.icon-sort-by-order {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf162;');
-}
-.icon-sort-by-order-alt {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf163;');
-}
-.icon-thumbs-up {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf164;');
-}
-.icon-thumbs-down {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf165;');
-}
-.icon-youtube-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf166;');
-}
-.icon-youtube {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf167;');
-}
-.icon-xing {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf168;');
-}
-.icon-xing-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf169;');
-}
-.icon-youtube-play {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16a;');
-}
-.icon-dropbox {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16b;');
-}
-.icon-stackexchange {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16c;');
-}
-.icon-instagram {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16d;');
-}
-.icon-flickr {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16e;');
-}
-.icon-adn {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf170;');
-}
-.icon-bitbucket {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf171;');
-}
-.icon-bitbucket-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf172;');
-}
-.icon-tumblr {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf173;');
-}
-.icon-tumblr-sign {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf174;');
-}
-.icon-long-arrow-down {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf175;');
-}
-.icon-long-arrow-up {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf176;');
-}
-.icon-long-arrow-left {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf177;');
-}
-.icon-long-arrow-right {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf178;');
-}
-.icon-apple {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf179;');
-}
-.icon-windows {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17a;');
-}
-.icon-android {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17b;');
-}
-.icon-linux {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17c;');
-}
-.icon-dribbble {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17d;');
-}
-.icon-skype {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17e;');
-}
-.icon-foursquare {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf180;');
-}
-.icon-trello {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf181;');
-}
-.icon-female {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf182;');
-}
-.icon-male {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf183;');
-}
-.icon-gittip {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf184;');
-}
-.icon-sun {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf185;');
-}
-.icon-moon {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf186;');
-}
-.icon-archive {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf187;');
-}
-.icon-bug {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf188;');
-}
-.icon-vk {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf189;');
-}
-.icon-weibo {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf18a;');
-}
-.icon-renren {
-  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf18b;');
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/styles/font-awesome.css
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/styles/font-awesome.css b/contrib/views/slider/src/main/resources/ui/vendor/styles/font-awesome.css
deleted file mode 100644
index 7ede182..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/styles/font-awesome.css
+++ /dev/null
@@ -1,1479 +0,0 @@
-/*!
- *  Font Awesome 3.2.1
- *  the iconic font designed for Bootstrap
- *  ------------------------------------------------------------------------------
- *  The full suite of pictographic icons, examples, and documentation can be
- *  found at http://fontawesome.io.  Stay up to date on Twitter at
- *  http://twitter.com/fontawesome.
- *
- *  License
- *  ------------------------------------------------------------------------------
- *  - The Font Awesome font is licensed under SIL OFL 1.1 -
- *    http://scripts.sil.org/OFL
- *  - Font Awesome CSS, LESS, and SASS files are licensed under MIT License -
- *    http://opensource.org/licenses/mit-license.html
- *  - Font Awesome documentation licensed under CC BY 3.0 -
- *    http://creativecommons.org/licenses/by/3.0/
- *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:
- *    "Font Awesome by Dave Gandy - http://fontawesome.io"
- *
- *  Author - Dave Gandy
- *  ------------------------------------------------------------------------------
- *  Email: dave@fontawesome.io
- *  Twitter: http://twitter.com/davegandy
- *  Work: Lead Product Designer @ Kyruus - http://kyruus.com
- */
-/* FONT PATH
- * -------------------------- */
-@font-face {
-  font-family: 'FontAwesome';
-  src: url('../font/fontawesome-webfont.eot?v=3.2.1');
-  src: url('../font/fontawesome-webfont.eot?#iefix&v=3.2.1') format('embedded-opentype'), url('../font/fontawesome-webfont.woff?v=3.2.1') format('woff'), url('../font/fontawesome-webfont.ttf?v=3.2.1') format('truetype'), url('../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1') format('svg');
-  font-weight: normal;
-  font-style: normal;
-}
-/* FONT AWESOME CORE
- * -------------------------- */
-[class^="icon-"],
-[class*=" icon-"] {
-  font-family: FontAwesome;
-  font-weight: normal;
-  font-style: normal;
-  text-decoration: inherit;
-  -webkit-font-smoothing: antialiased;
-  *margin-right: .3em;
-}
-[class^="icon-"]:before,
-[class*=" icon-"]:before {
-  text-decoration: inherit;
-  display: inline-block;
-  speak: none;
-}
-/* makes the font 33% larger relative to the icon container */
-.icon-large:before {
-  vertical-align: -10%;
-  font-size: 1.3333333333333333em;
-}
-/* makes sure icons active on rollover in links */
-a [class^="icon-"],
-a [class*=" icon-"] {
-  display: inline;
-}
-/* increased font size for icon-large */
-[class^="icon-"].icon-fixed-width,
-[class*=" icon-"].icon-fixed-width {
-  display: inline-block;
-  width: 1.1428571428571428em;
-  text-align: right;
-  padding-right: 0.2857142857142857em;
-}
-[class^="icon-"].icon-fixed-width.icon-large,
-[class*=" icon-"].icon-fixed-width.icon-large {
-  width: 1.4285714285714286em;
-}
-.icons-ul {
-  margin-left: 2.142857142857143em;
-  list-style-type: none;
-}
-.icons-ul > li {
-  position: relative;
-}
-.icons-ul .icon-li {
-  position: absolute;
-  left: -2.142857142857143em;
-  width: 2.142857142857143em;
-  text-align: center;
-  line-height: inherit;
-}
-[class^="icon-"].hide,
-[class*=" icon-"].hide {
-  display: none;
-}
-.icon-muted {
-  color: #eeeeee;
-}
-.icon-light {
-  color: #ffffff;
-}
-.icon-dark {
-  color: #333333;
-}
-.icon-border {
-  border: solid 1px #eeeeee;
-  padding: .2em .25em .15em;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-.icon-2x {
-  font-size: 2em;
-}
-.icon-2x.icon-border {
-  border-width: 2px;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-}
-.icon-3x {
-  font-size: 3em;
-}
-.icon-3x.icon-border {
-  border-width: 3px;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-}
-.icon-4x {
-  font-size: 4em;
-}
-.icon-4x.icon-border {
-  border-width: 4px;
-  -webkit-border-radius: 6px;
-  -moz-border-radius: 6px;
-  border-radius: 6px;
-}
-.icon-5x {
-  font-size: 5em;
-}
-.icon-5x.icon-border {
-  border-width: 5px;
-  -webkit-border-radius: 7px;
-  -moz-border-radius: 7px;
-  border-radius: 7px;
-}
-.pull-right {
-  float: right;
-}
-.pull-left {
-  float: left;
-}
-[class^="icon-"].pull-left,
-[class*=" icon-"].pull-left {
-  margin-right: .3em;
-}
-[class^="icon-"].pull-right,
-[class*=" icon-"].pull-right {
-  margin-left: .3em;
-}
-/* BOOTSTRAP SPECIFIC CLASSES
- * -------------------------- */
-/* Bootstrap 2.0 sprites.less reset */
-[class^="icon-"],
-[class*=" icon-"] {
-  display: inline;
-  width: auto;
-  height: auto;
-  line-height: normal;
-  vertical-align: baseline;
-  background-image: none;
-  background-position: 0% 0%;
-  background-repeat: repeat;
-  margin-top: 0;
-}
-/* more sprites.less reset */
-.icon-white,
-.nav-pills > .active > a > [class^="icon-"],
-.nav-pills > .active > a > [class*=" icon-"],
-.nav-list > .active > a > [class^="icon-"],
-.nav-list > .active > a > [class*=" icon-"],
-.navbar-inverse .nav > .active > a > [class^="icon-"],
-.navbar-inverse .nav > .active > a > [class*=" icon-"],
-.dropdown-menu > li > a:hover > [class^="icon-"],
-.dropdown-menu > li > a:hover > [class*=" icon-"],
-.dropdown-menu > .active > a > [class^="icon-"],
-.dropdown-menu > .active > a > [class*=" icon-"],
-.dropdown-submenu:hover > a > [class^="icon-"],
-.dropdown-submenu:hover > a > [class*=" icon-"] {
-  background-image: none;
-}
-/* keeps Bootstrap styles with and without icons the same */
-.btn [class^="icon-"].icon-large,
-.nav [class^="icon-"].icon-large,
-.btn [class*=" icon-"].icon-large,
-.nav [class*=" icon-"].icon-large {
-  line-height: .9em;
-}
-.btn [class^="icon-"].icon-spin,
-.nav [class^="icon-"].icon-spin,
-.btn [class*=" icon-"].icon-spin,
-.nav [class*=" icon-"].icon-spin {
-  display: inline-block;
-}
-.nav-tabs [class^="icon-"],
-.nav-pills [class^="icon-"],
-.nav-tabs [class*=" icon-"],
-.nav-pills [class*=" icon-"],
-.nav-tabs [class^="icon-"].icon-large,
-.nav-pills [class^="icon-"].icon-large,
-.nav-tabs [class*=" icon-"].icon-large,
-.nav-pills [class*=" icon-"].icon-large {
-  line-height: .9em;
-}
-.btn [class^="icon-"].pull-left.icon-2x,
-.btn [class*=" icon-"].pull-left.icon-2x,
-.btn [class^="icon-"].pull-right.icon-2x,
-.btn [class*=" icon-"].pull-right.icon-2x {
-  margin-top: .18em;
-}
-.btn [class^="icon-"].icon-spin.icon-large,
-.btn [class*=" icon-"].icon-spin.icon-large {
-  line-height: .8em;
-}
-.btn.btn-small [class^="icon-"].pull-left.icon-2x,
-.btn.btn-small [class*=" icon-"].pull-left.icon-2x,
-.btn.btn-small [class^="icon-"].pull-right.icon-2x,
-.btn.btn-small [class*=" icon-"].pull-right.icon-2x {
-  margin-top: .25em;
-}
-.btn.btn-large [class^="icon-"],
-.btn.btn-large [class*=" icon-"] {
-  margin-top: 0;
-}
-.btn.btn-large [class^="icon-"].pull-left.icon-2x,
-.btn.btn-large [class*=" icon-"].pull-left.icon-2x,
-.btn.btn-large [class^="icon-"].pull-right.icon-2x,
-.btn.btn-large [class*=" icon-"].pull-right.icon-2x {
-  margin-top: .05em;
-}
-.btn.btn-large [class^="icon-"].pull-left.icon-2x,
-.btn.btn-large [class*=" icon-"].pull-left.icon-2x {
-  margin-right: .2em;
-}
-.btn.btn-large [class^="icon-"].pull-right.icon-2x,
-.btn.btn-large [class*=" icon-"].pull-right.icon-2x {
-  margin-left: .2em;
-}
-/* Fixes alignment in nav lists */
-.nav-list [class^="icon-"],
-.nav-list [class*=" icon-"] {
-  line-height: inherit;
-}
-/* EXTRAS
- * -------------------------- */
-/* Stacked and layered icon */
-.icon-stack {
-  position: relative;
-  display: inline-block;
-  width: 2em;
-  height: 2em;
-  line-height: 2em;
-  vertical-align: -35%;
-}
-.icon-stack [class^="icon-"],
-.icon-stack [class*=" icon-"] {
-  display: block;
-  text-align: center;
-  position: absolute;
-  width: 100%;
-  height: 100%;
-  font-size: 1em;
-  line-height: inherit;
-  *line-height: 2em;
-}
-.icon-stack .icon-stack-base {
-  font-size: 2em;
-  *line-height: 1em;
-}
-/* Animated rotating icon */
-.icon-spin {
-  display: inline-block;
-  -moz-animation: spin 2s infinite linear;
-  -o-animation: spin 2s infinite linear;
-  -webkit-animation: spin 2s infinite linear;
-  animation: spin 2s infinite linear;
-}
-/* Prevent stack and spinners from being taken inline when inside a link */
-a .icon-stack,
-a .icon-spin {
-  display: inline-block;
-  text-decoration: none;
-}
-@-moz-keyframes spin {
-  0% {
-    -moz-transform: rotate(0deg);
-  }
-  100% {
-    -moz-transform: rotate(359deg);
-  }
-}
-@-webkit-keyframes spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-  }
-}
-@-o-keyframes spin {
-  0% {
-    -o-transform: rotate(0deg);
-  }
-  100% {
-    -o-transform: rotate(359deg);
-  }
-}
-@-ms-keyframes spin {
-  0% {
-    -ms-transform: rotate(0deg);
-  }
-  100% {
-    -ms-transform: rotate(359deg);
-  }
-}
-@keyframes spin {
-  0% {
-    transform: rotate(0deg);
-  }
-  100% {
-    transform: rotate(359deg);
-  }
-}
-/* Icon rotations and mirroring */
-.icon-rotate-90:before {
-  -webkit-transform: rotate(90deg);
-  -moz-transform: rotate(90deg);
-  -ms-transform: rotate(90deg);
-  -o-transform: rotate(90deg);
-  transform: rotate(90deg);
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
-}
-.icon-rotate-180:before {
-  -webkit-transform: rotate(180deg);
-  -moz-transform: rotate(180deg);
-  -ms-transform: rotate(180deg);
-  -o-transform: rotate(180deg);
-  transform: rotate(180deg);
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
-}
-.icon-rotate-270:before {
-  -webkit-transform: rotate(270deg);
-  -moz-transform: rotate(270deg);
-  -ms-transform: rotate(270deg);
-  -o-transform: rotate(270deg);
-  transform: rotate(270deg);
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
-}
-.icon-flip-horizontal:before {
-  -webkit-transform: scale(-1, 1);
-  -moz-transform: scale(-1, 1);
-  -ms-transform: scale(-1, 1);
-  -o-transform: scale(-1, 1);
-  transform: scale(-1, 1);
-}
-.icon-flip-vertical:before {
-  -webkit-transform: scale(1, -1);
-  -moz-transform: scale(1, -1);
-  -ms-transform: scale(1, -1);
-  -o-transform: scale(1, -1);
-  transform: scale(1, -1);
-}
-/* ensure rotation occurs inside anchor tags */
-a .icon-rotate-90:before,
-a .icon-rotate-180:before,
-a .icon-rotate-270:before,
-a .icon-flip-horizontal:before,
-a .icon-flip-vertical:before {
-  display: inline-block;
-}
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
-   readers do not read off random characters that represent icons */
-.icon-glass:before {
-  content: "\f000";
-}
-.icon-music:before {
-  content: "\f001";
-}
-.icon-search:before {
-  content: "\f002";
-}
-.icon-envelope-alt:before {
-  content: "\f003";
-}
-.icon-heart:before {
-  content: "\f004";
-}
-.icon-star:before {
-  content: "\f005";
-}
-.icon-star-empty:before {
-  content: "\f006";
-}
-.icon-user:before {
-  content: "\f007";
-}
-.icon-film:before {
-  content: "\f008";
-}
-.icon-th-large:before {
-  content: "\f009";
-}
-.icon-th:before {
-  content: "\f00a";
-}
-.icon-th-list:before {
-  content: "\f00b";
-}
-.icon-ok:before {
-  content: "\f00c";
-}
-.icon-remove:before {
-  content: "\f00d";
-}
-.icon-zoom-in:before {
-  content: "\f00e";
-}
-.icon-zoom-out:before {
-  content: "\f010";
-}
-.icon-power-off:before,
-.icon-off:before {
-  content: "\f011";
-}
-.icon-signal:before {
-  content: "\f012";
-}
-.icon-gear:before,
-.icon-cog:before {
-  content: "\f013";
-}
-.icon-trash:before {
-  content: "\f014";
-}
-.icon-home:before {
-  content: "\f015";
-}
-.icon-file-alt:before {
-  content: "\f016";
-}
-.icon-time:before {
-  content: "\f017";
-}
-.icon-road:before {
-  content: "\f018";
-}
-.icon-download-alt:before {
-  content: "\f019";
-}
-.icon-download:before {
-  content: "\f01a";
-}
-.icon-upload:before {
-  content: "\f01b";
-}
-.icon-inbox:before {
-  content: "\f01c";
-}
-.icon-play-circle:before {
-  content: "\f01d";
-}
-.icon-rotate-right:before,
-.icon-repeat:before {
-  content: "\f01e";
-}
-.icon-refresh:before {
-  content: "\f021";
-}
-.icon-list-alt:before {
-  content: "\f022";
-}
-.icon-lock:before {
-  content: "\f023";
-}
-.icon-flag:before {
-  content: "\f024";
-}
-.icon-headphones:before {
-  content: "\f025";
-}
-.icon-volume-off:before {
-  content: "\f026";
-}
-.icon-volume-down:before {
-  content: "\f027";
-}
-.icon-volume-up:before {
-  content: "\f028";
-}
-.icon-qrcode:before {
-  content: "\f029";
-}
-.icon-barcode:before {
-  content: "\f02a";
-}
-.icon-tag:before {
-  content: "\f02b";
-}
-.icon-tags:before {
-  content: "\f02c";
-}
-.icon-book:before {
-  content: "\f02d";
-}
-.icon-bookmark:before {
-  content: "\f02e";
-}
-.icon-print:before {
-  content: "\f02f";
-}
-.icon-camera:before {
-  content: "\f030";
-}
-.icon-font:before {
-  content: "\f031";
-}
-.icon-bold:before {
-  content: "\f032";
-}
-.icon-italic:before {
-  content: "\f033";
-}
-.icon-text-height:before {
-  content: "\f034";
-}
-.icon-text-width:before {
-  content: "\f035";
-}
-.icon-align-left:before {
-  content: "\f036";
-}
-.icon-align-center:before {
-  content: "\f037";
-}
-.icon-align-right:before {
-  content: "\f038";
-}
-.icon-align-justify:before {
-  content: "\f039";
-}
-.icon-list:before {
-  content: "\f03a";
-}
-.icon-indent-left:before {
-  content: "\f03b";
-}
-.icon-indent-right:before {
-  content: "\f03c";
-}
-.icon-facetime-video:before {
-  content: "\f03d";
-}
-.icon-picture:before {
-  content: "\f03e";
-}
-.icon-pencil:before {
-  content: "\f040";
-}
-.icon-map-marker:before {
-  content: "\f041";
-}
-.icon-adjust:before {
-  content: "\f042";
-}
-.icon-tint:before {
-  content: "\f043";
-}
-.icon-edit:before {
-  content: "\f044";
-}
-.icon-share:before {
-  content: "\f045";
-}
-.icon-check:before {
-  content: "\f046";
-}
-.icon-move:before {
-  content: "\f047";
-}
-.icon-step-backward:before {
-  content: "\f048";
-}
-.icon-fast-backward:before {
-  content: "\f049";
-}
-.icon-backward:before {
-  content: "\f04a";
-}
-.icon-play:before {
-  content: "\f04b";
-}
-.icon-pause:before {
-  content: "\f04c";
-}
-.icon-stop:before {
-  content: "\f04d";
-}
-.icon-forward:before {
-  content: "\f04e";
-}
-.icon-fast-forward:before {
-  content: "\f050";
-}
-.icon-step-forward:before {
-  content: "\f051";
-}
-.icon-eject:before {
-  content: "\f052";
-}
-.icon-chevron-left:before {
-  content: "\f053";
-}
-.icon-chevron-right:before {
-  content: "\f054";
-}
-.icon-plus-sign:before {
-  content: "\f055";
-}
-.icon-minus-sign:before {
-  content: "\f056";
-}
-.icon-remove-sign:before {
-  content: "\f057";
-}
-.icon-ok-sign:before {
-  content: "\f058";
-}
-.icon-question-sign:before {
-  content: "\f059";
-}
-.icon-info-sign:before {
-  content: "\f05a";
-}
-.icon-screenshot:before {
-  content: "\f05b";
-}
-.icon-remove-circle:before {
-  content: "\f05c";
-}
-.icon-ok-circle:before {
-  content: "\f05d";
-}
-.icon-ban-circle:before {
-  content: "\f05e";
-}
-.icon-arrow-left:before {
-  content: "\f060";
-}
-.icon-arrow-right:before {
-  content: "\f061";
-}
-.icon-arrow-up:before {
-  content: "\f062";
-}
-.icon-arrow-down:before {
-  content: "\f063";
-}
-.icon-mail-forward:before,
-.icon-share-alt:before {
-  content: "\f064";
-}
-.icon-resize-full:before {
-  content: "\f065";
-}
-.icon-resize-small:before {
-  content: "\f066";
-}
-.icon-plus:before {
-  content: "\f067";
-}
-.icon-minus:before {
-  content: "\f068";
-}
-.icon-asterisk:before {
-  content: "\f069";
-}
-.icon-exclamation-sign:before {
-  content: "\f06a";
-}
-.icon-gift:before {
-  content: "\f06b";
-}
-.icon-leaf:before {
-  content: "\f06c";
-}
-.icon-fire:before {
-  content: "\f06d";
-}
-.icon-eye-open:before {
-  content: "\f06e";
-}
-.icon-eye-close:before {
-  content: "\f070";
-}
-.icon-warning-sign:before {
-  content: "\f071";
-}
-.icon-plane:before {
-  content: "\f072";
-}
-.icon-calendar:before {
-  content: "\f073";
-}
-.icon-random:before {
-  content: "\f074";
-}
-.icon-comment:before {
-  content: "\f075";
-}
-.icon-magnet:before {
-  content: "\f076";
-}
-.icon-chevron-up:before {
-  content: "\f077";
-}
-.icon-chevron-down:before {
-  content: "\f078";
-}
-.icon-retweet:before {
-  content: "\f079";
-}
-.icon-shopping-cart:before {
-  content: "\f07a";
-}
-.icon-folder-close:before {
-  content: "\f07b";
-}
-.icon-folder-open:before {
-  content: "\f07c";
-}
-.icon-resize-vertical:before {
-  content: "\f07d";
-}
-.icon-resize-horizontal:before {
-  content: "\f07e";
-}
-.icon-bar-chart:before {
-  content: "\f080";
-}
-.icon-twitter-sign:before {
-  content: "\f081";
-}
-.icon-facebook-sign:before {
-  content: "\f082";
-}
-.icon-camera-retro:before {
-  content: "\f083";
-}
-.icon-key:before {
-  content: "\f084";
-}
-.icon-gears:before,
-.icon-cogs:before {
-  content: "\f085";
-}
-.icon-comments:before {
-  content: "\f086";
-}
-.icon-thumbs-up-alt:before {
-  content: "\f087";
-}
-.icon-thumbs-down-alt:before {
-  content: "\f088";
-}
-.icon-star-half:before {
-  content: "\f089";
-}
-.icon-heart-empty:before {
-  content: "\f08a";
-}
-.icon-signout:before {
-  content: "\f08b";
-}
-.icon-linkedin-sign:before {
-  content: "\f08c";
-}
-.icon-pushpin:before {
-  content: "\f08d";
-}
-.icon-external-link:before {
-  content: "\f08e";
-}
-.icon-signin:before {
-  content: "\f090";
-}
-.icon-trophy:before {
-  content: "\f091";
-}
-.icon-github-sign:before {
-  content: "\f092";
-}
-.icon-upload-alt:before {
-  content: "\f093";
-}
-.icon-lemon:before {
-  content: "\f094";
-}
-.icon-phone:before {
-  content: "\f095";
-}
-.icon-unchecked:before,
-.icon-check-empty:before {
-  content: "\f096";
-}
-.icon-bookmark-empty:before {
-  content: "\f097";
-}
-.icon-phone-sign:before {
-  content: "\f098";
-}
-.icon-twitter:before {
-  content: "\f099";
-}
-.icon-facebook:before {
-  content: "\f09a";
-}
-.icon-github:before {
-  content: "\f09b";
-}
-.icon-unlock:before {
-  content: "\f09c";
-}
-.icon-credit-card:before {
-  content: "\f09d";
-}
-.icon-rss:before {
-  content: "\f09e";
-}
-.icon-hdd:before {
-  content: "\f0a0";
-}
-.icon-bullhorn:before {
-  content: "\f0a1";
-}
-.icon-bell:before {
-  content: "\f0a2";
-}
-.icon-certificate:before {
-  content: "\f0a3";
-}
-.icon-hand-right:before {
-  content: "\f0a4";
-}
-.icon-hand-left:before {
-  content: "\f0a5";
-}
-.icon-hand-up:before {
-  content: "\f0a6";
-}
-.icon-hand-down:before {
-  content: "\f0a7";
-}
-.icon-circle-arrow-left:before {
-  content: "\f0a8";
-}
-.icon-circle-arrow-right:before {
-  content: "\f0a9";
-}
-.icon-circle-arrow-up:before {
-  content: "\f0aa";
-}
-.icon-circle-arrow-down:before {
-  content: "\f0ab";
-}
-.icon-globe:before {
-  content: "\f0ac";
-}
-.icon-wrench:before {
-  content: "\f0ad";
-}
-.icon-tasks:before {
-  content: "\f0ae";
-}
-.icon-filter:before {
-  content: "\f0b0";
-}
-.icon-briefcase:before {
-  content: "\f0b1";
-}
-.icon-fullscreen:before {
-  content: "\f0b2";
-}
-.icon-group:before {
-  content: "\f0c0";
-}
-.icon-link:before {
-  content: "\f0c1";
-}
-.icon-cloud:before {
-  content: "\f0c2";
-}
-.icon-beaker:before {
-  content: "\f0c3";
-}
-.icon-cut:before {
-  content: "\f0c4";
-}
-.icon-copy:before {
-  content: "\f0c5";
-}
-.icon-paperclip:before,
-.icon-paper-clip:before {
-  content: "\f0c6";
-}
-.icon-save:before {
-  content: "\f0c7";
-}
-.icon-sign-blank:before {
-  content: "\f0c8";
-}
-.icon-reorder:before {
-  content: "\f0c9";
-}
-.icon-list-ul:before {
-  content: "\f0ca";
-}
-.icon-list-ol:before {
-  content: "\f0cb";
-}
-.icon-strikethrough:before {
-  content: "\f0cc";
-}
-.icon-underline:before {
-  content: "\f0cd";
-}
-.icon-table:before {
-  content: "\f0ce";
-}
-.icon-magic:before {
-  content: "\f0d0";
-}
-.icon-truck:before {
-  content: "\f0d1";
-}
-.icon-pinterest:before {
-  content: "\f0d2";
-}
-.icon-pinterest-sign:before {
-  content: "\f0d3";
-}
-.icon-google-plus-sign:before {
-  content: "\f0d4";
-}
-.icon-google-plus:before {
-  content: "\f0d5";
-}
-.icon-money:before {
-  content: "\f0d6";
-}
-.icon-caret-down:before {
-  content: "\f0d7";
-}
-.icon-caret-up:before {
-  content: "\f0d8";
-}
-.icon-caret-left:before {
-  content: "\f0d9";
-}
-.icon-caret-right:before {
-  content: "\f0da";
-}
-.icon-columns:before {
-  content: "\f0db";
-}
-.icon-sort:before {
-  content: "\f0dc";
-}
-.icon-sort-down:before {
-  content: "\f0dd";
-}
-.icon-sort-up:before {
-  content: "\f0de";
-}
-.icon-envelope:before {
-  content: "\f0e0";
-}
-.icon-linkedin:before {
-  content: "\f0e1";
-}
-.icon-rotate-left:before,
-.icon-undo:before {
-  content: "\f0e2";
-}
-.icon-legal:before {
-  content: "\f0e3";
-}
-.icon-dashboard:before {
-  content: "\f0e4";
-}
-.icon-comment-alt:before {
-  content: "\f0e5";
-}
-.icon-comments-alt:before {
-  content: "\f0e6";
-}
-.icon-bolt:before {
-  content: "\f0e7";
-}
-.icon-sitemap:before {
-  content: "\f0e8";
-}
-.icon-umbrella:before {
-  content: "\f0e9";
-}
-.icon-paste:before {
-  content: "\f0ea";
-}
-.icon-lightbulb:before {
-  content: "\f0eb";
-}
-.icon-exchange:before {
-  content: "\f0ec";
-}
-.icon-cloud-download:before {
-  content: "\f0ed";
-}
-.icon-cloud-upload:before {
-  content: "\f0ee";
-}
-.icon-user-md:before {
-  content: "\f0f0";
-}
-.icon-stethoscope:before {
-  content: "\f0f1";
-}
-.icon-suitcase:before {
-  content: "\f0f2";
-}
-.icon-bell-alt:before {
-  content: "\f0f3";
-}
-.icon-coffee:before {
-  content: "\f0f4";
-}
-.icon-food:before {
-  content: "\f0f5";
-}
-.icon-file-text-alt:before {
-  content: "\f0f6";
-}
-.icon-building:before {
-  content: "\f0f7";
-}
-.icon-hospital:before {
-  content: "\f0f8";
-}
-.icon-ambulance:before {
-  content: "\f0f9";
-}
-.icon-medkit:before {
-  content: "\f0fa";
-}
-.icon-fighter-jet:before {
-  content: "\f0fb";
-}
-.icon-beer:before {
-  content: "\f0fc";
-}
-.icon-h-sign:before {
-  content: "\f0fd";
-}
-.icon-plus-sign-alt:before {
-  content: "\f0fe";
-}
-.icon-double-angle-left:before {
-  content: "\f100";
-}
-.icon-double-angle-right:before {
-  content: "\f101";
-}
-.icon-double-angle-up:before {
-  content: "\f102";
-}
-.icon-double-angle-down:before {
-  content: "\f103";
-}
-.icon-angle-left:before {
-  content: "\f104";
-}
-.icon-angle-right:before {
-  content: "\f105";
-}
-.icon-angle-up:before {
-  content: "\f106";
-}
-.icon-angle-down:before {
-  content: "\f107";
-}
-.icon-desktop:before {
-  content: "\f108";
-}
-.icon-laptop:before {
-  content: "\f109";
-}
-.icon-tablet:before {
-  content: "\f10a";
-}
-.icon-mobile-phone:before {
-  content: "\f10b";
-}
-.icon-circle-blank:before {
-  content: "\f10c";
-}
-.icon-quote-left:before {
-  content: "\f10d";
-}
-.icon-quote-right:before {
-  content: "\f10e";
-}
-.icon-spinner:before {
-  content: "\f110";
-}
-.icon-circle:before {
-  content: "\f111";
-}
-.icon-mail-reply:before,
-.icon-reply:before {
-  content: "\f112";
-}
-.icon-github-alt:before {
-  content: "\f113";
-}
-.icon-folder-close-alt:before {
-  content: "\f114";
-}
-.icon-folder-open-alt:before {
-  content: "\f115";
-}
-.icon-expand-alt:before {
-  content: "\f116";
-}
-.icon-collapse-alt:before {
-  content: "\f117";
-}
-.icon-smile:before {
-  content: "\f118";
-}
-.icon-frown:before {
-  content: "\f119";
-}
-.icon-meh:before {
-  content: "\f11a";
-}
-.icon-gamepad:before {
-  content: "\f11b";
-}
-.icon-keyboard:before {
-  content: "\f11c";
-}
-.icon-flag-alt:before {
-  content: "\f11d";
-}
-.icon-flag-checkered:before {
-  content: "\f11e";
-}
-.icon-terminal:before {
-  content: "\f120";
-}
-.icon-code:before {
-  content: "\f121";
-}
-.icon-reply-all:before {
-  content: "\f122";
-}
-.icon-mail-reply-all:before {
-  content: "\f122";
-}
-.icon-star-half-full:before,
-.icon-star-half-empty:before {
-  content: "\f123";
-}
-.icon-location-arrow:before {
-  content: "\f124";
-}
-.icon-crop:before {
-  content: "\f125";
-}
-.icon-code-fork:before {
-  content: "\f126";
-}
-.icon-unlink:before {
-  content: "\f127";
-}
-.icon-question:before {
-  content: "\f128";
-}
-.icon-info:before {
-  content: "\f129";
-}
-.icon-exclamation:before {
-  content: "\f12a";
-}
-.icon-superscript:before {
-  content: "\f12b";
-}
-.icon-subscript:before {
-  content: "\f12c";
-}
-.icon-eraser:before {
-  content: "\f12d";
-}
-.icon-puzzle-piece:before {
-  content: "\f12e";
-}
-.icon-microphone:before {
-  content: "\f130";
-}
-.icon-microphone-off:before {
-  content: "\f131";
-}
-.icon-shield:before {
-  content: "\f132";
-}
-.icon-calendar-empty:before {
-  content: "\f133";
-}
-.icon-fire-extinguisher:before {
-  content: "\f134";
-}
-.icon-rocket:before {
-  content: "\f135";
-}
-.icon-maxcdn:before {
-  content: "\f136";
-}
-.icon-chevron-sign-left:before {
-  content: "\f137";
-}
-.icon-chevron-sign-right:before {
-  content: "\f138";
-}
-.icon-chevron-sign-up:before {
-  content: "\f139";
-}
-.icon-chevron-sign-down:before {
-  content: "\f13a";
-}
-.icon-html5:before {
-  content: "\f13b";
-}
-.icon-css3:before {
-  content: "\f13c";
-}
-.icon-anchor:before {
-  content: "\f13d";
-}
-.icon-unlock-alt:before {
-  content: "\f13e";
-}
-.icon-bullseye:before {
-  content: "\f140";
-}
-.icon-ellipsis-horizontal:before {
-  content: "\f141";
-}
-.icon-ellipsis-vertical:before {
-  content: "\f142";
-}
-.icon-rss-sign:before {
-  content: "\f143";
-}
-.icon-play-sign:before {
-  content: "\f144";
-}
-.icon-ticket:before {
-  content: "\f145";
-}
-.icon-minus-sign-alt:before {
-  content: "\f146";
-}
-.icon-check-minus:before {
-  content: "\f147";
-}
-.icon-level-up:before {
-  content: "\f148";
-}
-.icon-level-down:before {
-  content: "\f149";
-}
-.icon-check-sign:before {
-  content: "\f14a";
-}
-.icon-edit-sign:before {
-  content: "\f14b";
-}
-.icon-external-link-sign:before {
-  content: "\f14c";
-}
-.icon-share-sign:before {
-  content: "\f14d";
-}
-.icon-compass:before {
-  content: "\f14e";
-}
-.icon-collapse:before {
-  content: "\f150";
-}
-.icon-collapse-top:before {
-  content: "\f151";
-}
-.icon-expand:before {
-  content: "\f152";
-}
-.icon-euro:before,
-.icon-eur:before {
-  content: "\f153";
-}
-.icon-gbp:before {
-  content: "\f154";
-}
-.icon-dollar:before,
-.icon-usd:before {
-  content: "\f155";
-}
-.icon-rupee:before,
-.icon-inr:before {
-  content: "\f156";
-}
-.icon-yen:before,
-.icon-jpy:before {
-  content: "\f157";
-}
-.icon-renminbi:before,
-.icon-cny:before {
-  content: "\f158";
-}
-.icon-won:before,
-.icon-krw:before {
-  content: "\f159";
-}
-.icon-bitcoin:before,
-.icon-btc:before {
-  content: "\f15a";
-}
-.icon-file:before {
-  content: "\f15b";
-}
-.icon-file-text:before {
-  content: "\f15c";
-}
-.icon-sort-by-alphabet:before {
-  content: "\f15d";
-}
-.icon-sort-by-alphabet-alt:before {
-  content: "\f15e";
-}
-.icon-sort-by-attributes:before {
-  content: "\f160";
-}
-.icon-sort-by-attributes-alt:before {
-  content: "\f161";
-}
-.icon-sort-by-order:before {
-  content: "\f162";
-}
-.icon-sort-by-order-alt:before {
-  content: "\f163";
-}
-.icon-thumbs-up:before {
-  content: "\f164";
-}
-.icon-thumbs-down:before {
-  content: "\f165";
-}
-.icon-youtube-sign:before {
-  content: "\f166";
-}
-.icon-youtube:before {
-  content: "\f167";
-}
-.icon-xing:before {
-  content: "\f168";
-}
-.icon-xing-sign:before {
-  content: "\f169";
-}
-.icon-youtube-play:before {
-  content: "\f16a";
-}
-.icon-dropbox:before {
-  content: "\f16b";
-}
-.icon-stackexchange:before {
-  content: "\f16c";
-}
-.icon-instagram:before {
-  content: "\f16d";
-}
-.icon-flickr:before {
-  content: "\f16e";
-}
-.icon-adn:before {
-  content: "\f170";
-}
-.icon-bitbucket:before {
-  content: "\f171";
-}
-.icon-bitbucket-sign:before {
-  content: "\f172";
-}
-.icon-tumblr:before {
-  content: "\f173";
-}
-.icon-tumblr-sign:before {
-  content: "\f174";
-}
-.icon-long-arrow-down:before {
-  content: "\f175";
-}
-.icon-long-arrow-up:before {
-  content: "\f176";
-}
-.icon-long-arrow-left:before {
-  content: "\f177";
-}
-.icon-long-arrow-right:before {
-  content: "\f178";
-}
-.icon-apple:before {
-  content: "\f179";
-}
-.icon-windows:before {
-  content: "\f17a";
-}
-.icon-android:before {
-  content: "\f17b";
-}
-.icon-linux:before {
-  content: "\f17c";
-}
-.icon-dribbble:before {
-  content: "\f17d";
-}
-.icon-skype:before {
-  content: "\f17e";
-}
-.icon-foursquare:before {
-  content: "\f180";
-}
-.icon-trello:before {
-  content: "\f181";
-}
-.icon-female:before {
-  content: "\f182";
-}
-.icon-male:before {
-  content: "\f183";
-}
-.icon-gittip:before {
-  content: "\f184";
-}
-.icon-sun:before {
-  content: "\f185";
-}
-.icon-moon:before {
-  content: "\f186";
-}
-.icon-archive:before {
-  content: "\f187";
-}
-.icon-bug:before {
-  content: "\f188";
-}
-.icon-vk:before {
-  content: "\f189";
-}
-.icon-weibo:before {
-  content: "\f18a";
-}
-.icon-renren:before {
-  content: "\f18b";
-}


[12/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/development/ember-data.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/development/ember-data.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/development/ember-data.js
deleted file mode 100644
index 0fb494a..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/development/ember-data.js
+++ /dev/null
@@ -1,10620 +0,0 @@
-/*!
- * @overview  Ember Data
- * @copyright Copyright 2011-2014 Tilde Inc. and contributors.
- *            Portions Copyright 2011 LivingSocial Inc.
- * @license   Licensed under MIT license (see license.js)
- * @version   1.0.0-beta.7+canary.238bb5ce
- */
-
-
-(function() {
-var define, requireModule;
-
-(function() {
-  var registry = {}, seen = {};
-
-  define = function(name, deps, callback) {
-    registry[name] = { deps: deps, callback: callback };
-  };
-
-  requireModule = function(name) {
-    if (seen[name]) { return seen[name]; }
-    seen[name] = {};
-
-    var mod, deps, callback, reified , exports;
-
-    mod = registry[name];
-
-    if (!mod) {
-      throw new Error("Module '" + name + "' not found.");
-    }
-
-    deps = mod.deps;
-    callback = mod.callback;
-    reified = [];
-    exports;
-
-    for (var i=0, l=deps.length; i<l; i++) {
-      if (deps[i] === 'exports') {
-        reified.push(exports = {});
-      } else {
-        reified.push(requireModule(deps[i]));
-      }
-    }
-
-    var value = callback.apply(this, reified);
-    return seen[name] = exports || value;
-  };
-})();
-(function() {
-/**
-  @module ember-data
-*/
-
-/**
-  All Ember Data methods and functions are defined inside of this namespace.
-
-  @class DS
-  @static
-*/
-var DS;
-if ('undefined' === typeof DS) {
-  /**
-    @property VERSION
-    @type String
-    @default '1.0.0-beta.7+canary.238bb5ce'
-    @static
-  */
-  DS = Ember.Namespace.create({
-    VERSION: '1.0.0-beta.7+canary.238bb5ce'
-  });
-
-  if ('undefined' !== typeof window) {
-    window.DS = DS;
-  }
-
-  if (Ember.libraries) {
-    Ember.libraries.registerCoreLibrary('Ember Data', DS.VERSION);
-  }
-}
-
-})();
-
-
-
-(function() {
-/**
-  This is used internally to enable deprecation of container paths and provide
-  a decent message to the user indicating how to fix the issue.
-
-  @class ContainerProxy
-  @namespace DS
-  @private
-*/
-var ContainerProxy = function (container){
-  this.container = container;
-};
-
-ContainerProxy.prototype.aliasedFactory = function(path, preLookup) {
-  var _this = this;
-
-  return {create: function(){ 
-    if (preLookup) { preLookup(); }
-
-    return _this.container.lookup(path); 
-  }};
-};
-
-ContainerProxy.prototype.registerAlias = function(source, dest, preLookup) {
-  var factory = this.aliasedFactory(dest, preLookup);
-
-  return this.container.register(source, factory);
-};
-
-ContainerProxy.prototype.registerDeprecation = function(deprecated, valid) {
-  var preLookupCallback = function(){
-    Ember.deprecate("You tried to look up '" + deprecated + "', " +
-                    "but this has been deprecated in favor of '" + valid + "'.", false);
-  };
-
-  return this.registerAlias(deprecated, valid, preLookupCallback);
-};
-
-ContainerProxy.prototype.registerDeprecations = function(proxyPairs) {
-  for (var i = proxyPairs.length; i > 0; i--) {
-    var proxyPair = proxyPairs[i - 1],
-        deprecated = proxyPair['deprecated'],
-        valid = proxyPair['valid'];
-
-    this.registerDeprecation(deprecated, valid);
-  }
-};
-
-DS.ContainerProxy = ContainerProxy;
-
-})();
-
-
-
-(function() {
-var get = Ember.get, set = Ember.set, isNone = Ember.isNone;
-
-// Simple dispatcher to support overriding the aliased
-// method in subclasses.
-function aliasMethod(methodName) {
-  return function() {
-    return this[methodName].apply(this, arguments);
-  };
-}
-
-/**
-  In Ember Data a Serializer is used to serialize and deserialize
-  records when they are transferred in and out of an external source.
-  This process involves normalizing property names, transforming
-  attribute values and serializing relationships.
-
-  For maximum performance Ember Data recommends you use the
-  [RESTSerializer](DS.RESTSerializer.html) or one of its subclasses.
-
-  `JSONSerializer` is useful for simpler or legacy backends that may
-  not support the http://jsonapi.org/ spec.
-
-  @class JSONSerializer
-  @namespace DS
-*/
-DS.JSONSerializer = Ember.Object.extend({
-  /**
-    The primaryKey is used when serializing and deserializing
-    data. Ember Data always uses the `id` property to store the id of
-    the record. The external source may not always follow this
-    convention. In these cases it is useful to override the
-    primaryKey property to match the primaryKey of your external
-    store.
-
-    Example
-
-    ```javascript
-    App.ApplicationSerializer = DS.JSONSerializer.extend({
-      primaryKey: '_id'
-    });
-    ```
-
-    @property primaryKey
-    @type {String}
-    @default 'id'
-  */
-  primaryKey: 'id',
-
-  /**
-   Given a subclass of `DS.Model` and a JSON object this method will
-   iterate through each attribute of the `DS.Model` and invoke the
-   `DS.Transform#deserialize` method on the matching property of the
-   JSON object.  This method is typically called after the
-   serializer's `normalize` method.
-
-   @method applyTransforms
-   @private
-   @param {subclass of DS.Model} type
-   @param {Object} data The data to transform
-   @return {Object} data The transformed data object
-  */
-  applyTransforms: function(type, data) {
-    type.eachTransformedAttribute(function(key, type) {
-      var transform = this.transformFor(type);
-      data[key] = transform.deserialize(data[key]);
-    }, this);
-
-    return data;
-  },
-
-  /**
-    Normalizes a part of the JSON payload returned by
-    the server. You should override this method, munge the hash
-    and call super if you have generic normalization to do.
-
-    It takes the type of the record that is being normalized
-    (as a DS.Model class), the property where the hash was
-    originally found, and the hash to normalize.
-
-    You can use this method, for example, to normalize underscored keys to camelized
-    or other general-purpose normalizations.
-
-    Example
-
-    ```javascript
-    App.ApplicationSerializer = DS.JSONSerializer.extend({
-      normalize: function(type, hash) {
-        var fields = Ember.get(type, 'fields');
-        fields.forEach(function(field) {
-          var payloadField = Ember.String.underscore(field);
-          if (field === payloadField) { return; }
-
-          hash[field] = hash[payloadField];
-          delete hash[payloadField];
-        });
-        return this._super.apply(this, arguments);
-      }
-    });
-    ```
-
-    @method normalize
-    @param {subclass of DS.Model} type
-    @param {Object} hash
-    @return {Object}
-  */
-  normalize: function(type, hash) {
-    if (!hash) { return hash; }
-
-    this.applyTransforms(type, hash);
-    return hash;
-  },
-
-  // SERIALIZE
-  /**
-    Called when a record is saved in order to convert the
-    record into JSON.
-
-    By default, it creates a JSON object with a key for
-    each attribute and belongsTo relationship.
-
-    For example, consider this model:
-
-    ```javascript
-    App.Comment = DS.Model.extend({
-      title: DS.attr(),
-      body: DS.attr(),
-
-      author: DS.belongsTo('user')
-    });
-    ```
-
-    The default serialization would create a JSON object like:
-
-    ```javascript
-    {
-      "title": "Rails is unagi",
-      "body": "Rails? Omakase? O_O",
-      "author": 12
-    }
-    ```
-
-    By default, attributes are passed through as-is, unless
-    you specified an attribute type (`DS.attr('date')`). If
-    you specify a transform, the JavaScript value will be
-    serialized when inserted into the JSON hash.
-
-    By default, belongs-to relationships are converted into
-    IDs when inserted into the JSON hash.
-
-    ## IDs
-
-    `serialize` takes an options hash with a single option:
-    `includeId`. If this option is `true`, `serialize` will,
-    by default include the ID in the JSON object it builds.
-
-    The adapter passes in `includeId: true` when serializing
-    a record for `createRecord`, but not for `updateRecord`.
-
-    ## Customization
-
-    Your server may expect a different JSON format than the
-    built-in serialization format.
-
-    In that case, you can implement `serialize` yourself and
-    return a JSON hash of your choosing.
-
-    ```javascript
-    App.PostSerializer = DS.JSONSerializer.extend({
-      serialize: function(post, options) {
-        var json = {
-          POST_TTL: post.get('title'),
-          POST_BDY: post.get('body'),
-          POST_CMS: post.get('comments').mapProperty('id')
-        }
-
-        if (options.includeId) {
-          json.POST_ID_ = post.get('id');
-        }
-
-        return json;
-      }
-    });
-    ```
-
-    ## Customizing an App-Wide Serializer
-
-    If you want to define a serializer for your entire
-    application, you'll probably want to use `eachAttribute`
-    and `eachRelationship` on the record.
-
-    ```javascript
-    App.ApplicationSerializer = DS.JSONSerializer.extend({
-      serialize: function(record, options) {
-        var json = {};
-
-        record.eachAttribute(function(name) {
-          json[serverAttributeName(name)] = record.get(name);
-        })
-
-        record.eachRelationship(function(name, relationship) {
-          if (relationship.kind === 'hasMany') {
-            json[serverHasManyName(name)] = record.get(name).mapBy('id');
-          }
-        });
-
-        if (options.includeId) {
-          json.ID_ = record.get('id');
-        }
-
-        return json;
-      }
-    });
-
-    function serverAttributeName(attribute) {
-      return attribute.underscore().toUpperCase();
-    }
-
-    function serverHasManyName(name) {
-      return serverAttributeName(name.singularize()) + "_IDS";
-    }
-    ```
-
-    This serializer will generate JSON that looks like this:
-
-    ```javascript
-    {
-      "TITLE": "Rails is omakase",
-      "BODY": "Yep. Omakase.",
-      "COMMENT_IDS": [ 1, 2, 3 ]
-    }
-    ```
-
-    ## Tweaking the Default JSON
-
-    If you just want to do some small tweaks on the default JSON,
-    you can call super first and make the tweaks on the returned
-    JSON.
-
-    ```javascript
-    App.PostSerializer = DS.JSONSerializer.extend({
-      serialize: function(record, options) {
-        var json = this._super.apply(this, arguments);
-
-        json.subject = json.title;
-        delete json.title;
-
-        return json;
-      }
-    });
-    ```
-
-    @method serialize
-    @param {subclass of DS.Model} record
-    @param {Object} options
-    @return {Object} json
-  */
-  serialize: function(record, options) {
-    var json = {};
-
-    if (options && options.includeId) {
-      var id = get(record, 'id');
-
-      if (id) {
-        json[get(this, 'primaryKey')] = id;
-      }
-    }
-
-    record.eachAttribute(function(key, attribute) {
-      this.serializeAttribute(record, json, key, attribute);
-    }, this);
-
-    record.eachRelationship(function(key, relationship) {
-      if (relationship.kind === 'belongsTo') {
-        this.serializeBelongsTo(record, json, relationship);
-      } else if (relationship.kind === 'hasMany') {
-        this.serializeHasMany(record, json, relationship);
-      }
-    }, this);
-
-    return json;
-  },
-
-  /**
-   `serializeAttribute` can be used to customize how `DS.attr`
-   properties are serialized
-
-   For example if you wanted to ensure all you attributes were always
-   serialized as properties on an `attributes` object you could
-   write:
-
-   ```javascript
-   App.ApplicationSerializer = DS.JSONSerializer.extend({
-     serializeAttribute: function(record, json, key, attributes) {
-       json.attributes = json.attributes || {};
-       this._super(record, json.attributes, key, attributes);
-     }
-   });
-   ```
-
-   @method serializeAttribute
-   @param {DS.Model} record
-   @param {Object} json
-   @param {String} key
-   @param {Object} attribute
-  */
-  serializeAttribute: function(record, json, key, attribute) {
-    var attrs = get(this, 'attrs');
-    var value = get(record, key), type = attribute.type;
-
-    if (type) {
-      var transform = this.transformFor(type);
-      value = transform.serialize(value);
-    }
-
-    // if provided, use the mapping provided by `attrs` in
-    // the serializer
-    key = attrs && attrs[key] || (this.keyForAttribute ? this.keyForAttribute(key) : key);
-
-    json[key] = value;
-  },
-
-  /**
-   `serializeBelongsTo` can be used to customize how `DS.belongsTo`
-   properties are serialized.
-
-   Example
-
-   ```javascript
-   App.PostSerializer = DS.JSONSerializer.extend({
-     serializeBelongsTo: function(record, json, relationship) {
-       var key = relationship.key;
-
-       var belongsTo = get(record, key);
-
-       key = this.keyForRelationship ? this.keyForRelationship(key, "belongsTo") : key;
-
-       json[key] = Ember.isNone(belongsTo) ? belongsTo : belongsTo.toJSON();
-     }
-   });
-   ```
-
-   @method serializeBelongsTo
-   @param {DS.Model} record
-   @param {Object} json
-   @param {Object} relationship
-  */
-  serializeBelongsTo: function(record, json, relationship) {
-    var key = relationship.key;
-
-    var belongsTo = get(record, key);
-
-    key = this.keyForRelationship ? this.keyForRelationship(key, "belongsTo") : key;
-
-    if (isNone(belongsTo)) {
-      json[key] = belongsTo;
-    } else {
-      json[key] = get(belongsTo, 'id');
-    }
-
-    if (relationship.options.polymorphic) {
-      this.serializePolymorphicType(record, json, relationship);
-    }
-  },
-
-  /**
-   `serializeHasMany` can be used to customize how `DS.hasMany`
-   properties are serialized.
-
-   Example
-
-   ```javascript
-   App.PostSerializer = DS.JSONSerializer.extend({
-     serializeHasMany: function(record, json, relationship) {
-       var key = relationship.key;
-       if (key === 'comments') {
-         return;
-       } else {
-         this._super.apply(this, arguments);
-       }
-     }
-   });
-   ```
-
-   @method serializeHasMany
-   @param {DS.Model} record
-   @param {Object} json
-   @param {Object} relationship
-  */
-  serializeHasMany: function(record, json, relationship) {
-    var key = relationship.key;
-
-    var relationshipType = DS.RelationshipChange.determineRelationshipType(record.constructor, relationship);
-
-    if (relationshipType === 'manyToNone' || relationshipType === 'manyToMany') {
-      json[key] = get(record, key).mapBy('id');
-      // TODO support for polymorphic manyToNone and manyToMany relationships
-    }
-  },
-
-  /**
-    You can use this method to customize how polymorphic objects are
-    serialized. Objects are considered to be polymorphic if
-    `{polymorphic: true}` is pass as the second argument to the
-    `DS.belongsTo` function.
-
-    Example
-
-    ```javascript
-    App.CommentSerializer = DS.JSONSerializer.extend({
-      serializePolymorphicType: function(record, json, relationship) {
-        var key = relationship.key,
-            belongsTo = get(record, key);
-        key = this.keyForAttribute ? this.keyForAttribute(key) : key;
-        json[key + "_type"] = belongsTo.constructor.typeKey;
-      }
-    });
-   ```
-
-    @method serializePolymorphicType
-    @param {DS.Model} record
-    @param {Object} json
-    @param {Object} relationship
-  */
-  serializePolymorphicType: Ember.K,
-
-  // EXTRACT
-
-  /**
-    The `extract` method is used to deserialize payload data from the
-    server. By default the `JSONSerializer` does not push the records
-    into the store. However records that subclass `JSONSerializer`
-    such as the `RESTSerializer` may push records into the store as
-    part of the extract call.
-
-    This method delegates to a more specific extract method based on
-    the `requestType`.
-
-    Example
-
-    ```javascript
-    var get = Ember.get;
-    socket.on('message', function(message) {
-      var modelName = message.model;
-      var data = message.data;
-      var type = store.modelFor(modelName);
-      var serializer = store.serializerFor(type.typeKey);
-      var record = serializer.extract(store, type, data, get(data, 'id'), 'single');
-      store.push(modelName, record);
-    });
-    ```
-
-    @method extract
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @param {String or Number} id
-    @param {String} requestType
-    @return {Object} json The deserialized payload
-  */
-  extract: function(store, type, payload, id, requestType) {
-    this.extractMeta(store, type, payload);
-
-    var specificExtract = "extract" + requestType.charAt(0).toUpperCase() + requestType.substr(1);
-    return this[specificExtract](store, type, payload, id, requestType);
-  },
-
-  /**
-    `extractFindAll` is a hook into the extract method used when a
-    call is made to `DS.Store#findAll`. By default this method is an
-    alias for [extractArray](#method_extractArray).
-
-    @method extractFindAll
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Array} array An array of deserialized objects
-  */
-  extractFindAll: aliasMethod('extractArray'),
-  /**
-    `extractFindQuery` is a hook into the extract method used when a
-    call is made to `DS.Store#findQuery`. By default this method is an
-    alias for [extractArray](#method_extractArray).
-
-    @method extractFindQuery
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Array} array An array of deserialized objects
-  */
-  extractFindQuery: aliasMethod('extractArray'),
-  /**
-    `extractFindMany` is a hook into the extract method used when a
-    call is made to `DS.Store#findMany`. By default this method is
-    alias for [extractArray](#method_extractArray).
-
-    @method extractFindMany
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Array} array An array of deserialized objects
-  */
-  extractFindMany: aliasMethod('extractArray'),
-  /**
-    `extractFindHasMany` is a hook into the extract method used when a
-    call is made to `DS.Store#findHasMany`. By default this method is
-    alias for [extractArray](#method_extractArray).
-
-    @method extractFindHasMany
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Array} array An array of deserialized objects
-  */
-  extractFindHasMany: aliasMethod('extractArray'),
-
-  /**
-    `extractCreateRecord` is a hook into the extract method used when a
-    call is made to `DS.Store#createRecord`. By default this method is
-    alias for [extractSave](#method_extractSave).
-
-    @method extractCreateRecord
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Object} json The deserialized payload
-  */
-  extractCreateRecord: aliasMethod('extractSave'),
-  /**
-    `extractUpdateRecord` is a hook into the extract method used when
-    a call is made to `DS.Store#update`. By default this method is alias
-    for [extractSave](#method_extractSave).
-
-    @method extractUpdateRecord
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Object} json The deserialized payload
-  */
-  extractUpdateRecord: aliasMethod('extractSave'),
-  /**
-    `extractDeleteRecord` is a hook into the extract method used when
-    a call is made to `DS.Store#deleteRecord`. By default this method is
-    alias for [extractSave](#method_extractSave).
-
-    @method extractDeleteRecord
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Object} json The deserialized payload
-  */
-  extractDeleteRecord: aliasMethod('extractSave'),
-
-  /**
-    `extractFind` is a hook into the extract method used when
-    a call is made to `DS.Store#find`. By default this method is
-    alias for [extractSingle](#method_extractSingle).
-
-    @method extractFind
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Object} json The deserialized payload
-  */
-  extractFind: aliasMethod('extractSingle'),
-  /**
-    `extractFindBelongsTo` is a hook into the extract method used when
-    a call is made to `DS.Store#findBelongsTo`. By default this method is
-    alias for [extractSingle](#method_extractSingle).
-
-    @method extractFindBelongsTo
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Object} json The deserialized payload
-  */
-  extractFindBelongsTo: aliasMethod('extractSingle'),
-  /**
-    `extractSave` is a hook into the extract method used when a call
-    is made to `DS.Model#save`. By default this method is alias
-    for [extractSingle](#method_extractSingle).
-
-    @method extractSave
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Object} json The deserialized payload
-  */
-  extractSave: aliasMethod('extractSingle'),
-
-  /**
-    `extractSingle` is used to deserialize a single record returned
-    from the adapter.
-
-    Example
-
-    ```javascript
-    App.PostSerializer = DS.JSONSerializer.extend({
-      extractSingle: function(store, type, payload) {
-        payload.comments = payload._embedded.comment;
-        delete payload._embedded;
-
-        return this._super(store, type, payload);
-      },
-    });
-    ```
-
-    @method extractSingle
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Object} json The deserialized payload
-  */
-  extractSingle: function(store, type, payload) {
-    return this.normalize(type, payload);
-  },
-
-  /**
-    `extractArray` is used to deserialize an array of records
-    returned from the adapter.
-
-    Example
-
-    ```javascript
-    App.PostSerializer = DS.JSONSerializer.extend({
-      extractArray: function(store, type, payload) {
-        return payload.map(function(json) {
-          return this.extractSingle(json);
-        }, this);
-      }
-    });
-    ```
-
-    @method extractArray
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Array} array An array of deserialized objects
-  */
-  extractArray: function(store, type, payload) {
-    return this.normalize(type, payload);
-  },
-
-  /**
-    `extractMeta` is used to deserialize any meta information in the
-    adapter payload. By default Ember Data expects meta information to
-    be located on the `meta` property of the payload object.
-
-    Example
-
-    ```javascript
-    App.PostSerializer = DS.JSONSerializer.extend({
-      extractMeta: function(store, type, payload) {
-        if (payload && payload._pagination) {
-          store.metaForType(type, payload._pagination);
-          delete payload._pagination;
-        }
-      }
-    });
-    ```
-
-    @method extractMeta
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-  */
-  extractMeta: function(store, type, payload) {
-    if (payload && payload.meta) {
-      store.metaForType(type, payload.meta);
-      delete payload.meta;
-    }
-  },
-
-  /**
-   `keyForAttribute` can be used to define rules for how to convert an
-   attribute name in your model to a key in your JSON.
-
-   Example
-
-   ```javascript
-   App.ApplicationSerializer = DS.RESTSerializer.extend({
-     keyForAttribute: function(attr) {
-       return Ember.String.underscore(attr).toUpperCase();
-     }
-   });
-   ```
-
-   @method keyForAttribute
-   @param {String} key
-   @return {String} normalized key
-  */
-
-
-  /**
-   `keyForRelationship` can be used to define a custom key when
-   serializing relationship properties. By default `JSONSerializer`
-   does not provide an implementation of this method.
-
-   Example
-
-    ```javascript
-    App.PostSerializer = DS.JSONSerializer.extend({
-      keyForRelationship: function(key, relationship) {
-         return 'rel_' + Ember.String.underscore(key);
-      }
-    });
-    ```
-
-   @method keyForRelationship
-   @param {String} key
-   @param {String} relationship type
-   @return {String} normalized key
-  */
-
-  // HELPERS
-
-  /**
-   @method transformFor
-   @private
-   @param {String} attributeType
-   @param {Boolean} skipAssertion
-   @return {DS.Transform} transform
-  */
-  transformFor: function(attributeType, skipAssertion) {
-    var transform = this.container.lookup('transform:' + attributeType);
-    Ember.assert("Unable to find transform for '" + attributeType + "'", skipAssertion || !!transform);
-    return transform;
-  }
-});
-
-})();
-
-
-
-(function() {
-/**
-  @module ember-data
-*/
-var get = Ember.get, capitalize = Ember.String.capitalize, underscore = Ember.String.underscore, DS = window.DS ;
-
-/**
-  Extend `Ember.DataAdapter` with ED specific code.
-
-  @class DebugAdapter
-  @namespace DS
-  @extends Ember.DataAdapter
-  @private
-*/
-DS.DebugAdapter = Ember.DataAdapter.extend({
-  getFilters: function() {
-    return [
-      { name: 'isNew', desc: 'New' },
-      { name: 'isModified', desc: 'Modified' },
-      { name: 'isClean', desc: 'Clean' }
-    ];
-  },
-
-  detect: function(klass) {
-    return klass !== DS.Model && DS.Model.detect(klass);
-  },
-
-  columnsForType: function(type) {
-    var columns = [{ name: 'id', desc: 'Id' }], count = 0, self = this;
-    get(type, 'attributes').forEach(function(name, meta) {
-        if (count++ > self.attributeLimit) { return false; }
-        var desc = capitalize(underscore(name).replace('_', ' '));
-        columns.push({ name: name, desc: desc });
-    });
-    return columns;
-  },
-
-  getRecords: function(type) {
-    return this.get('store').all(type);
-  },
-
-  getRecordColumnValues: function(record) {
-    var self = this, count = 0,
-        columnValues = { id: get(record, 'id') };
-
-    record.eachAttribute(function(key) {
-      if (count++ > self.attributeLimit) {
-        return false;
-      }
-      var value = get(record, key);
-      columnValues[key] = value;
-    });
-    return columnValues;
-  },
-
-  getRecordKeywords: function(record) {
-    var keywords = [], keys = Ember.A(['id']);
-    record.eachAttribute(function(key) {
-      keys.push(key);
-    });
-    keys.forEach(function(key) {
-      keywords.push(get(record, key));
-    });
-    return keywords;
-  },
-
-  getRecordFilterValues: function(record) {
-    return {
-      isNew: record.get('isNew'),
-      isModified: record.get('isDirty') && !record.get('isNew'),
-      isClean: !record.get('isDirty')
-    };
-  },
-
-  getRecordColor: function(record) {
-    var color = 'black';
-    if (record.get('isNew')) {
-      color = 'green';
-    } else if (record.get('isDirty')) {
-      color = 'blue';
-    }
-    return color;
-  },
-
-  observeRecord: function(record, recordUpdated) {
-    var releaseMethods = Ember.A(), self = this,
-        keysToObserve = Ember.A(['id', 'isNew', 'isDirty']);
-
-    record.eachAttribute(function(key) {
-      keysToObserve.push(key);
-    });
-
-    keysToObserve.forEach(function(key) {
-      var handler = function() {
-        recordUpdated(self.wrapRecord(record));
-      };
-      Ember.addObserver(record, key, handler);
-      releaseMethods.push(function() {
-        Ember.removeObserver(record, key, handler);
-      });
-    });
-
-    var release = function() {
-      releaseMethods.forEach(function(fn) { fn(); } );
-    };
-
-    return release;
-  }
-
-});
-
-})();
-
-
-
-(function() {
-/**
-  The `DS.Transform` class is used to serialize and deserialize model
-  attributes when they are saved or loaded from an
-  adapter. Subclassing `DS.Transform` is useful for creating custom
-  attributes. All subclasses of `DS.Transform` must implement a
-  `serialize` and a `deserialize` method.
-
-  Example
-
-  ```javascript
-  App.RawTransform = DS.Transform.extend({
-    deserialize: function(serialized) {
-      return serialized;
-    },
-    serialize: function(deserialized) {
-      return deserialized;
-    }
-  });
-  ```
-
-  Usage
-
-  ```javascript
-  var attr = DS.attr;
-  App.Requirement = DS.Model.extend({
-    name: attr('string'),
-    optionsArray: attr('raw')
-  });
-  ```
-
-  @class Transform
-  @namespace DS
- */
-DS.Transform = Ember.Object.extend({
-  /**
-    When given a deserialized value from a record attribute this
-    method must return the serialized value.
-
-    Example
-
-    ```javascript
-    serialize: function(deserialized) {
-      return Ember.isEmpty(deserialized) ? null : Number(deserialized);
-    }
-    ```
-
-    @method serialize
-    @param deserialized The deserialized value
-    @return The serialized value
-  */
-  serialize: Ember.required(),
-
-  /**
-    When given a serialize value from a JSON object this method must
-    return the deserialized value for the record attribute.
-
-    Example
-
-    ```javascript
-    deserialize: function(serialized) {
-      return empty(serialized) ? null : Number(serialized);
-    }
-    ```
-
-    @method deserialize
-    @param serialized The serialized value
-    @return The deserialized value
-  */
-  deserialize: Ember.required()
-
-});
-
-})();
-
-
-
-(function() {
-
-/**
-  The `DS.BooleanTransform` class is used to serialize and deserialize
-  boolean attributes on Ember Data record objects. This transform is
-  used when `boolean` is passed as the type parameter to the
-  [DS.attr](../../data#method_attr) function.
-
-  Usage
-
-  ```javascript
-  var attr = DS.attr;
-  App.User = DS.Model.extend({
-    isAdmin: attr('boolean'),
-    name: attr('string'),
-    email: attr('string')
-  });
-  ```
-
-  @class BooleanTransform
-  @extends DS.Transform
-  @namespace DS
- */
-DS.BooleanTransform = DS.Transform.extend({
-  deserialize: function(serialized) {
-    var type = typeof serialized;
-
-    if (type === "boolean") {
-      return serialized;
-    } else if (type === "string") {
-      return serialized.match(/^true$|^t$|^1$/i) !== null;
-    } else if (type === "number") {
-      return serialized === 1;
-    } else {
-      return false;
-    }
-  },
-
-  serialize: function(deserialized) {
-    return Boolean(deserialized);
-  }
-});
-
-})();
-
-
-
-(function() {
-/**
-  The `DS.DateTransform` class is used to serialize and deserialize
-  date attributes on Ember Data record objects. This transform is used
-  when `date` is passed as the type parameter to the
-  [DS.attr](../../data#method_attr) function.
-
-  ```javascript
-  var attr = DS.attr;
-  App.Score = DS.Model.extend({
-    value: attr('number'),
-    player: DS.belongsTo('player'),
-    date: attr('date')
-  });
-  ```
-
-  @class DateTransform
-  @extends DS.Transform
-  @namespace DS
- */
-DS.DateTransform = DS.Transform.extend({
-
-  deserialize: function(serialized) {
-    var type = typeof serialized;
-
-    if (type === "string") {
-      return new Date(Ember.Date.parse(serialized));
-    } else if (type === "number") {
-      return new Date(serialized);
-    } else if (serialized === null || serialized === undefined) {
-      // if the value is not present in the data,
-      // return undefined, not null.
-      return serialized;
-    } else {
-      return null;
-    }
-  },
-
-  serialize: function(date) {
-    if (date instanceof Date) {
-      // Serialize it as a number to maintain millisecond precision
-      return Number(date);
-    } else {
-      return null;
-    }
-  }
-
-});
-
-})();
-
-
-
-(function() {
-var empty = Ember.isEmpty;
-/**
-  The `DS.NumberTransform` class is used to serialize and deserialize
-  numeric attributes on Ember Data record objects. This transform is
-  used when `number` is passed as the type parameter to the
-  [DS.attr](../../data#method_attr) function.
-
-  Usage
-
-  ```javascript
-  var attr = DS.attr;
-  App.Score = DS.Model.extend({
-    value: attr('number'),
-    player: DS.belongsTo('player'),
-    date: attr('date')
-  });
-  ```
-
-  @class NumberTransform
-  @extends DS.Transform
-  @namespace DS
- */
-DS.NumberTransform = DS.Transform.extend({
-
-  deserialize: function(serialized) {
-    return empty(serialized) ? null : Number(serialized);
-  },
-
-  serialize: function(deserialized) {
-    return empty(deserialized) ? null : Number(deserialized);
-  }
-});
-
-})();
-
-
-
-(function() {
-var none = Ember.isNone;
-
-/**
-  The `DS.StringTransform` class is used to serialize and deserialize
-  string attributes on Ember Data record objects. This transform is
-  used when `string` is passed as the type parameter to the
-  [DS.attr](../../data#method_attr) function.
-
-  Usage
-
-  ```javascript
-  var attr = DS.attr;
-  App.User = DS.Model.extend({
-    isAdmin: attr('boolean'),
-    name: attr('string'),
-    email: attr('string')
-  });
-  ```
-
-  @class StringTransform
-  @extends DS.Transform
-  @namespace DS
- */
-DS.StringTransform = DS.Transform.extend({
-
-  deserialize: function(serialized) {
-    return none(serialized) ? null : String(serialized);
-  },
-
-  serialize: function(deserialized) {
-    return none(deserialized) ? null : String(deserialized);
-  }
-
-});
-
-})();
-
-
-
-(function() {
-
-})();
-
-
-
-(function() {
-/**
-  @module ember-data
-*/
-
-var set = Ember.set;
-
-/*
-  This code registers an injection for Ember.Application.
-
-  If an Ember.js developer defines a subclass of DS.Store on their application,
-  this code will automatically instantiate it and make it available on the
-  router.
-
-  Additionally, after an application's controllers have been injected, they will
-  each have the store made available to them.
-
-  For example, imagine an Ember.js application with the following classes:
-
-  App.Store = DS.Store.extend({
-    adapter: 'custom'
-  });
-
-  App.PostsController = Ember.ArrayController.extend({
-    // ...
-  });
-
-  When the application is initialized, `App.Store` will automatically be
-  instantiated, and the instance of `App.PostsController` will have its `store`
-  property set to that instance.
-
-  Note that this code will only be run if the `ember-application` package is
-  loaded. If Ember Data is being used in an environment other than a
-  typical application (e.g., node.js where only `ember-runtime` is available),
-  this code will be ignored.
-*/
-
-Ember.onLoad('Ember.Application', function(Application) {
-  Application.initializer({
-    name: "store",
-
-    initialize: function(container, application) {
-      application.register('store:main', application.Store || DS.Store);
-
-      // allow older names to be looked up
-
-      var proxy = new DS.ContainerProxy(container);
-      proxy.registerDeprecations([
-        {deprecated: 'serializer:_default',  valid: 'serializer:-default'},
-        {deprecated: 'serializer:_rest',     valid: 'serializer:-rest'},
-        {deprecated: 'adapter:_rest',        valid: 'adapter:-rest'}
-      ]);
-
-      // new go forward paths
-      application.register('serializer:-default', DS.JSONSerializer);
-      application.register('serializer:-rest', DS.RESTSerializer);
-      application.register('adapter:-rest', DS.RESTAdapter);
-
-      // Eagerly generate the store so defaultStore is populated.
-      // TODO: Do this in a finisher hook
-      container.lookup('store:main');
-    }
-  });
-
-  Application.initializer({
-    name: "transforms",
-    before: "store",
-
-    initialize: function(container, application) {
-      application.register('transform:boolean', DS.BooleanTransform);
-      application.register('transform:date', DS.DateTransform);
-      application.register('transform:number', DS.NumberTransform);
-      application.register('transform:string', DS.StringTransform);
-    }
-  });
-
-  Application.initializer({
-    name: "data-adapter",
-    before: "store",
-
-    initialize: function(container, application) {
-      application.register('data-adapter:main', DS.DebugAdapter);
-    }
-  });
-
-  Application.initializer({
-    name: "injectStore",
-    before: "store",
-
-    initialize: function(container, application) {
-      application.inject('controller', 'store', 'store:main');
-      application.inject('route', 'store', 'store:main');
-      application.inject('serializer', 'store', 'store:main');
-      application.inject('data-adapter', 'store', 'store:main');
-    }
-  });
-
-});
-
-})();
-
-
-
-(function() {
-/**
-  @module ember-data
-*/
-
-/**
-  Date.parse with progressive enhancement for ISO 8601 <https://github.com/csnover/js-iso8601>
-
-  © 2011 Colin Snover <http://zetafleet.com>
-
-  Released under MIT license.
-
-  @class Date
-  @namespace Ember
-  @static
-*/
-Ember.Date = Ember.Date || {};
-
-var origParse = Date.parse, numericKeys = [ 1, 4, 5, 6, 7, 10, 11 ];
-
-/**
-  @method parse
-  @param date
-*/
-Ember.Date.parse = function (date) {
-    var timestamp, struct, minutesOffset = 0;
-
-    // ES5 §15.9.4.2 states that the string should attempt to be parsed as a Date Time String Format string
-    // before falling back to any implementation-specific date parsing, so that’s what we do, even if native
-    // implementations could be faster
-    //              1 YYYY                2 MM       3 DD           4 HH    5 mm       6 ss        7 msec        8 Z 9 ±    10 tzHH    11 tzmm
-    if ((struct = /^(\d{4}|[+\-]\d{6})(?:-(\d{2})(?:-(\d{2}))?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{3}))?)?(?:(Z)|([+\-])(\d{2})(?::(\d{2}))?)?)?$/.exec(date))) {
-        // avoid NaN timestamps caused by “undefined” values being passed to Date.UTC
-        for (var i = 0, k; (k = numericKeys[i]); ++i) {
-            struct[k] = +struct[k] || 0;
-        }
-
-        // allow undefined days and months
-        struct[2] = (+struct[2] || 1) - 1;
-        struct[3] = +struct[3] || 1;
-
-        if (struct[8] !== 'Z' && struct[9] !== undefined) {
-            minutesOffset = struct[10] * 60 + struct[11];
-
-            if (struct[9] === '+') {
-                minutesOffset = 0 - minutesOffset;
-            }
-        }
-
-        timestamp = Date.UTC(struct[1], struct[2], struct[3], struct[4], struct[5] + minutesOffset, struct[6], struct[7]);
-    }
-    else {
-        timestamp = origParse ? origParse(date) : NaN;
-    }
-
-    return timestamp;
-};
-
-if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.Date) {
-  Date.parse = Ember.Date.parse;
-}
-
-})();
-
-
-
-(function() {
-
-})();
-
-
-
-(function() {
-/**
-  @module ember-data
-*/
-
-var get = Ember.get, set = Ember.set;
-
-/**
-  A record array is an array that contains records of a certain type. The record
-  array materializes records as needed when they are retrieved for the first
-  time. You should not create record arrays yourself. Instead, an instance of
-  `DS.RecordArray` or its subclasses will be returned by your application's store
-  in response to queries.
-
-  @class RecordArray
-  @namespace DS
-  @extends Ember.ArrayProxy
-  @uses Ember.Evented
-*/
-
-DS.RecordArray = Ember.ArrayProxy.extend(Ember.Evented, {
-  /**
-    The model type contained by this record array.
-
-    @property type
-    @type DS.Model
-  */
-  type: null,
-
-  /**
-    The array of client ids backing the record array. When a
-    record is requested from the record array, the record
-    for the client id at the same index is materialized, if
-    necessary, by the store.
-
-    @property content
-    @private
-    @type Ember.Array
-  */
-  content: null,
-
-  /**
-    The flag to signal a `RecordArray` is currently loading data.
-
-    Example
-
-    ```javascript
-    var people = store.all(App.Person);
-    people.get('isLoaded'); // true
-    ```
-
-    @property isLoaded
-    @type Boolean
-  */
-  isLoaded: false,
-  /**
-    The flag to signal a `RecordArray` is currently loading data.
-
-    Example
-
-    ```javascript
-    var people = store.all(App.Person);
-    people.get('isUpdating'); // false
-    people.update();
-    people.get('isUpdating'); // true
-    ```
-
-    @property isUpdating
-    @type Boolean
-  */
-  isUpdating: false,
-
-  /**
-    The store that created this record array.
-
-    @property store
-    @private
-    @type DS.Store
-  */
-  store: null,
-
-  /**
-    Retrieves an object from the content by index.
-
-    @method objectAtContent
-    @private
-    @param {Number} index
-    @return {DS.Model} record
-  */
-  objectAtContent: function(index) {
-    var content = get(this, 'content');
-
-    return content.objectAt(index);
-  },
-
-  /**
-    Used to get the latest version of all of the records in this array
-    from the adapter.
-
-    Example
-
-    ```javascript
-    var people = store.all(App.Person);
-    people.get('isUpdating'); // false
-    people.update();
-    people.get('isUpdating'); // true
-    ```
-
-    @method update
-  */
-  update: function() {
-    if (get(this, 'isUpdating')) { return; }
-
-    var store = get(this, 'store'),
-        type = get(this, 'type');
-
-    return store.fetchAll(type, this);
-  },
-
-  /**
-    Adds a record to the `RecordArray`.
-
-    @method addRecord
-    @private
-    @param {DS.Model} record
-  */
-  addRecord: function(record) {
-    get(this, 'content').addObject(record);
-  },
-
-  /**
-    Removes a record to the `RecordArray`.
-
-    @method removeRecord
-    @private
-    @param {DS.Model} record
-  */
-  removeRecord: function(record) {
-    get(this, 'content').removeObject(record);
-  },
-
-  /**
-    Saves all of the records in the `RecordArray`.
-
-    Example
-
-    ```javascript
-    var messages = store.all(App.Message);
-    messages.forEach(function(message) {
-      message.set('hasBeenSeen', true);
-    });
-    messages.save();
-    ```
-
-    @method save
-    @return {DS.PromiseArray} promise
-  */
-  save: function() {
-    var promiseLabel = "DS: RecordArray#save " + get(this, 'type');
-    var promise = Ember.RSVP.all(this.invoke("save"), promiseLabel).then(function(array) {
-      return Ember.A(array);
-    }, null, "DS: RecordArray#save apply Ember.NativeArray");
-
-    return DS.PromiseArray.create({ promise: promise });
-  }
-});
-
-})();
-
-
-
-(function() {
-/**
-  @module ember-data
-*/
-
-var get = Ember.get;
-
-/**
-  Represents a list of records whose membership is determined by the
-  store. As records are created, loaded, or modified, the store
-  evaluates them to determine if they should be part of the record
-  array.
-
-  @class FilteredRecordArray
-  @namespace DS
-  @extends DS.RecordArray
-*/
-DS.FilteredRecordArray = DS.RecordArray.extend({
-  /**
-    The filterFunction is a function used to test records from the store to
-    determine if they should be part of the record array.
-
-    Example
-
-    ```javascript
-    var allPeople = store.all('person');
-    allPeople.mapBy('name'); // ["Tom Dale", "Yehuda Katz", "Trek Glowacki"]
-
-    var people = store.filter('person', function(person) {
-      if (person.get('name').match(/Katz$/)) { return true; }
-    });
-    people.mapBy('name'); // ["Yehuda Katz"]
-
-    var notKatzFilter = function(person) {
-      return !person.get('name').match(/Katz$/);
-    };
-    people.set('filterFunction', notKatzFilter);
-    people.mapBy('name'); // ["Tom Dale", "Trek Glowacki"]
-    ```
-
-    @method filterFunction
-    @param {DS.Model} record
-    @return {Boolean} `true` if the record should be in the array
-  */
-  filterFunction: null,
-  isLoaded: true,
-
-  replace: function() {
-    var type = get(this, 'type').toString();
-    throw new Error("The result of a client-side filter (on " + type + ") is immutable.");
-  },
-
-  /**
-    @method updateFilter
-    @private
-  */
-  updateFilter: Ember.observer(function() {
-    var manager = get(this, 'manager');
-    manager.updateFilter(this, get(this, 'type'), get(this, 'filterFunction'));
-  }, 'filterFunction')
-});
-
-})();
-
-
-
-(function() {
-/**
-  @module ember-data
-*/
-
-var get = Ember.get, set = Ember.set;
-
-/**
-  Represents an ordered list of records whose order and membership is
-  determined by the adapter. For example, a query sent to the adapter
-  may trigger a search on the server, whose results would be loaded
-  into an instance of the `AdapterPopulatedRecordArray`.
-
-  @class AdapterPopulatedRecordArray
-  @namespace DS
-  @extends DS.RecordArray
-*/
-DS.AdapterPopulatedRecordArray = DS.RecordArray.extend({
-  query: null,
-
-  replace: function() {
-    var type = get(this, 'type').toString();
-    throw new Error("The result of a server query (on " + type + ") is immutable.");
-  },
-
-  /**
-    @method load
-    @private
-    @param {Array} data
-  */
-  load: function(data) {
-    var store = get(this, 'store'),
-        type = get(this, 'type'),
-        records = store.pushMany(type, data),
-        meta = store.metadataFor(type);
-
-    this.setProperties({
-      content: Ember.A(records),
-      isLoaded: true,
-      meta: meta
-    });
-
-    // TODO: does triggering didLoad event should be the last action of the runLoop?
-    Ember.run.once(this, 'trigger', 'didLoad');
-  }
-});
-
-})();
-
-
-
-(function() {
-/**
-  @module ember-data
-*/
-
-var get = Ember.get, set = Ember.set;
-var map = Ember.EnumerableUtils.map;
-
-/**
-  A `ManyArray` is a `RecordArray` that represents the contents of a has-many
-  relationship.
-
-  The `ManyArray` is instantiated lazily the first time the relationship is
-  requested.
-
-  ### Inverses
-
-  Often, the relationships in Ember Data applications will have
-  an inverse. For example, imagine the following models are
-  defined:
-
-  ```javascript
-  App.Post = DS.Model.extend({
-    comments: DS.hasMany('comment')
-  });
-
-  App.Comment = DS.Model.extend({
-    post: DS.belongsTo('post')
-  });
-  ```
-
-  If you created a new instance of `App.Post` and added
-  a `App.Comment` record to its `comments` has-many
-  relationship, you would expect the comment's `post`
-  property to be set to the post that contained
-  the has-many.
-
-  We call the record to which a relationship belongs the
-  relationship's _owner_.
-
-  @class ManyArray
-  @namespace DS
-  @extends DS.RecordArray
-*/
-DS.ManyArray = DS.RecordArray.extend({
-  init: function() {
-    this._super.apply(this, arguments);
-    this._changesToSync = Ember.OrderedSet.create();
-  },
-
-  /**
-    The property name of the relationship
-
-    @property {String} name
-    @private
-  */
-  name: null,
-
-  /**
-    The record to which this relationship belongs.
-
-    @property {DS.Model} owner
-    @private
-  */
-  owner: null,
-
-  /**
-    `true` if the relationship is polymorphic, `false` otherwise.
-
-    @property {Boolean} isPolymorphic
-    @private
-  */
-  isPolymorphic: false,
-
-  // LOADING STATE
-
-  isLoaded: false,
-
-  /**
-    Used for async `hasMany` arrays
-    to keep track of when they will resolve.
-
-    @property {Ember.RSVP.Promise} promise
-    @private
-  */
-  promise: null,
-
-  /**
-    @method loadingRecordsCount
-    @param {Number} count
-    @private
-  */
-  loadingRecordsCount: function(count) {
-    this.loadingRecordsCount = count;
-  },
-
-  /**
-    @method loadedRecord
-    @private
-  */
-  loadedRecord: function() {
-    this.loadingRecordsCount--;
-    if (this.loadingRecordsCount === 0) {
-      set(this, 'isLoaded', true);
-      this.trigger('didLoad');
-    }
-  },
-
-  /**
-    @method fetch
-    @private
-  */
-  fetch: function() {
-    var records = get(this, 'content'),
-        store = get(this, 'store'),
-        owner = get(this, 'owner'),
-        resolver = Ember.RSVP.defer("DS: ManyArray#fetch " + get(this, 'type'));
-
-    var unloadedRecords = records.filterProperty('isEmpty', true);
-    store.fetchMany(unloadedRecords, owner, resolver);
-  },
-
-  // Overrides Ember.Array's replace method to implement
-  replaceContent: function(index, removed, added) {
-    // Map the array of record objects into an array of  client ids.
-    added = map(added, function(record) {
-      Ember.assert("You cannot add '" + record.constructor.typeKey + "' records to this relationship (only '" + this.type.typeKey + "' allowed)", !this.type || record instanceof this.type);
-      return record;
-    }, this);
-
-    this._super(index, removed, added);
-  },
-
-  arrangedContentDidChange: function() {
-    Ember.run.once(this, 'fetch');
-  },
-
-  arrayContentWillChange: function(index, removed, added) {
-    var owner = get(this, 'owner'),
-        name = get(this, 'name');
-
-    if (!owner._suspendedRelationships) {
-      // This code is the first half of code that continues inside
-      // of arrayContentDidChange. It gets or creates a change from
-      // the child object, adds the current owner as the old
-      // parent if this is the first time the object was removed
-      // from a ManyArray, and sets `newParent` to null.
-      //
-      // Later, if the object is added to another ManyArray,
-      // the `arrayContentDidChange` will set `newParent` on
-      // the change.
-      for (var i=index; i<index+removed; i++) {
-        var record = get(this, 'content').objectAt(i);
-
-        var change = DS.RelationshipChange.createChange(owner, record, get(this, 'store'), {
-          parentType: owner.constructor,
-          changeType: "remove",
-          kind: "hasMany",
-          key: name
-        });
-
-        this._changesToSync.add(change);
-      }
-    }
-
-    return this._super.apply(this, arguments);
-  },
-
-  arrayContentDidChange: function(index, removed, added) {
-    this._super.apply(this, arguments);
-
-    var owner = get(this, 'owner'),
-        name = get(this, 'name'),
-        store = get(this, 'store');
-
-    if (!owner._suspendedRelationships) {
-      // This code is the second half of code that started in
-      // `arrayContentWillChange`. It gets or creates a change
-      // from the child object, and adds the current owner as
-      // the new parent.
-      for (var i=index; i<index+added; i++) {
-        var record = get(this, 'content').objectAt(i);
-
-        var change = DS.RelationshipChange.createChange(owner, record, store, {
-          parentType: owner.constructor,
-          changeType: "add",
-          kind:"hasMany",
-          key: name
-        });
-        change.hasManyName = name;
-
-        this._changesToSync.add(change);
-      }
-
-      // We wait until the array has finished being
-      // mutated before syncing the OneToManyChanges created
-      // in arrayContentWillChange, so that the array
-      // membership test in the sync() logic operates
-      // on the final results.
-      this._changesToSync.forEach(function(change) {
-        change.sync();
-      });
-
-      this._changesToSync.clear();
-    }
-  },
-
-  /**
-    Create a child record within the owner
-
-    @method createRecord
-    @private
-    @param {Object} hash
-    @return {DS.Model} record
-  */
-  createRecord: function(hash) {
-    var owner = get(this, 'owner'),
-        store = get(owner, 'store'),
-        type = get(this, 'type'),
-        record;
-
-    Ember.assert("You cannot add '" + type.typeKey + "' records to this polymorphic relationship.", !get(this, 'isPolymorphic'));
-
-    record = store.createRecord.call(store, type, hash);
-    this.pushObject(record);
-
-    return record;
-  }
-
-});
-
-})();
-
-
-
-(function() {
-/**
-  @module ember-data
-*/
-
-})();
-
-
-
-(function() {
-/*globals Ember*/
-/*jshint eqnull:true*/
-/**
-  @module ember-data
-*/
-
-var get = Ember.get, set = Ember.set;
-var once = Ember.run.once;
-var isNone = Ember.isNone;
-var forEach = Ember.EnumerableUtils.forEach;
-var indexOf = Ember.EnumerableUtils.indexOf;
-var map = Ember.EnumerableUtils.map;
-var resolve = Ember.RSVP.resolve;
-var copy = Ember.copy;
-
-// Implementors Note:
-//
-//   The variables in this file are consistently named according to the following
-//   scheme:
-//
-//   * +id+ means an identifier managed by an external source, provided inside
-//     the data provided by that source. These are always coerced to be strings
-//     before being used internally.
-//   * +clientId+ means a transient numerical identifier generated at runtime by
-//     the data store. It is important primarily because newly created objects may
-//     not yet have an externally generated id.
-//   * +reference+ means a record reference object, which holds metadata about a
-//     record, even if it has not yet been fully materialized.
-//   * +type+ means a subclass of DS.Model.
-
-// Used by the store to normalize IDs entering the store.  Despite the fact
-// that developers may provide IDs as numbers (e.g., `store.find(Person, 1)`),
-// it is important that internally we use strings, since IDs may be serialized
-// and lose type information.  For example, Ember's router may put a record's
-// ID into the URL, and if we later try to deserialize that URL and find the
-// corresponding record, we will not know if it is a string or a number.
-var coerceId = function(id) {
-  return id == null ? null : id+'';
-};
-
-/**
-  The store contains all of the data for records loaded from the server.
-  It is also responsible for creating instances of `DS.Model` that wrap
-  the individual data for a record, so that they can be bound to in your
-  Handlebars templates.
-
-  Define your application's store like this:
-
-  ```javascript
-  MyApp.Store = DS.Store.extend();
-  ```
-
-  Most Ember.js applications will only have a single `DS.Store` that is
-  automatically created by their `Ember.Application`.
-
-  You can retrieve models from the store in several ways. To retrieve a record
-  for a specific id, use `DS.Store`'s `find()` method:
-
-  ```javascript
-  var person = store.find('person', 123);
-  ```
-
-  If your application has multiple `DS.Store` instances (an unusual case), you can
-  specify which store should be used:
-
-  ```javascript
-  var person = store.find(App.Person, 123);
-  ```
-
-  By default, the store will talk to your backend using a standard
-  REST mechanism. You can customize how the store talks to your
-  backend by specifying a custom adapter:
-
-  ```javascript
-   MyApp.store = DS.Store.create({
-     adapter: 'MyApp.CustomAdapter'
-   });
-   ```
-
-  You can learn more about writing a custom adapter by reading the `DS.Adapter`
-  documentation.
-
-  @class Store
-  @namespace DS
-  @extends Ember.Object
-*/
-DS.Store = Ember.Object.extend({
-
-  /**
-    @method init
-    @private
-  */
-  init: function() {
-    // internal bookkeeping; not observable
-    this.typeMaps = {};
-    this.recordArrayManager = DS.RecordArrayManager.create({
-      store: this
-    });
-    this._relationshipChanges = {};
-    this._pendingSave = [];
-  },
-
-  /**
-    The adapter to use to communicate to a backend server or other persistence layer.
-
-    This can be specified as an instance, class, or string.
-
-    If you want to specify `App.CustomAdapter` as a string, do:
-
-    ```js
-    adapter: 'custom'
-    ```
-
-    @property adapter
-    @default DS.RESTAdapter
-    @type {DS.Adapter|String}
-  */
-  adapter: '-rest',
-
-  /**
-    Returns a JSON representation of the record using a custom
-    type-specific serializer, if one exists.
-
-    The available options are:
-
-    * `includeId`: `true` if the record's ID should be included in
-      the JSON representation
-
-    @method serialize
-    @private
-    @param {DS.Model} record the record to serialize
-    @param {Object} options an options hash
-  */
-  serialize: function(record, options) {
-    return this.serializerFor(record.constructor.typeKey).serialize(record, options);
-  },
-
-  /**
-    This property returns the adapter, after resolving a possible
-    string key.
-
-    If the supplied `adapter` was a class, or a String property
-    path resolved to a class, this property will instantiate the
-    class.
-
-    This property is cacheable, so the same instance of a specified
-    adapter class should be used for the lifetime of the store.
-
-    @property defaultAdapter
-    @private
-    @returns DS.Adapter
-  */
-  defaultAdapter: Ember.computed('adapter', function() {
-    var adapter = get(this, 'adapter');
-
-    Ember.assert('You tried to set `adapter` property to an instance of `DS.Adapter`, where it should be a name or a factory', !(adapter instanceof DS.Adapter));
-
-    if (typeof adapter === 'string') {
-      adapter = this.container.lookup('adapter:' + adapter) || this.container.lookup('adapter:application') || this.container.lookup('adapter:-rest');
-    }
-
-    if (DS.Adapter.detect(adapter)) {
-      adapter = adapter.create({ container: this.container });
-    }
-
-    return adapter;
-  }),
-
-  // .....................
-  // . CREATE NEW RECORD .
-  // .....................
-
-  /**
-    Create a new record in the current store. The properties passed
-    to this method are set on the newly created record.
-
-    To create a new instance of `App.Post`:
-
-    ```js
-    store.createRecord('post', {
-      title: "Rails is omakase"
-    });
-    ```
-
-    @method createRecord
-    @param {String} type
-    @param {Object} properties a hash of properties to set on the
-      newly created record.
-    @returns {DS.Model} record
-  */
-  createRecord: function(type, properties) {
-    type = this.modelFor(type);
-
-    properties = copy(properties) || {};
-
-    // If the passed properties do not include a primary key,
-    // give the adapter an opportunity to generate one. Typically,
-    // client-side ID generators will use something like uuid.js
-    // to avoid conflicts.
-
-    if (isNone(properties.id)) {
-      properties.id = this._generateId(type);
-    }
-
-    // Coerce ID to a string
-    properties.id = coerceId(properties.id);
-
-    var record = this.buildRecord(type, properties.id);
-
-    // Move the record out of its initial `empty` state into
-    // the `loaded` state.
-    record.loadedData();
-
-    // Set the properties specified on the record.
-    record.setProperties(properties);
-
-    return record;
-  },
-
-  /**
-    If possible, this method asks the adapter to generate an ID for
-    a newly created record.
-
-    @method _generateId
-    @private
-    @param {String} type
-    @returns {String} if the adapter can generate one, an ID
-  */
-  _generateId: function(type) {
-    var adapter = this.adapterFor(type);
-
-    if (adapter && adapter.generateIdForRecord) {
-      return adapter.generateIdForRecord(this);
-    }
-
-    return null;
-  },
-
-  // .................
-  // . DELETE RECORD .
-  // .................
-
-  /**
-    For symmetry, a record can be deleted via the store.
-
-    Example
-
-    ```javascript
-    var post = store.createRecord('post', {
-      title: "Rails is omakase"
-    });
-
-    store.deleteRecord(post);
-    ```
-
-    @method deleteRecord
-    @param {DS.Model} record
-  */
-  deleteRecord: function(record) {
-    record.deleteRecord();
-  },
-
-  /**
-    For symmetry, a record can be unloaded via the store. Only
-    non-dirty records can be unloaded.
-
-    Example
-
-    ```javascript
-    store.find('post', 1).then(function(post) {
-      store.unloadRecord(post);
-    });
-    ```
-
-    @method unloadRecord
-    @param {DS.Model} record
-  */
-  unloadRecord: function(record) {
-    record.unloadRecord();
-  },
-
-  // ................
-  // . FIND RECORDS .
-  // ................
-
-  /**
-    This is the main entry point into finding records. The first parameter to
-    this method is the model's name as a string.
-
-    ---
-
-    To find a record by ID, pass the `id` as the second parameter:
-
-    ```javascript
-    store.find('person', 1);
-    ```
-
-    The `find` method will always return a **promise** that will be resolved
-    with the record. If the record was already in the store, the promise will
-    be resolved immediately. Otherwise, the store will ask the adapter's `find`
-    method to find the necessary data.
-
-    The `find` method will always resolve its promise with the same object for
-    a given type and `id`.
-
-    ---
-
-    To find all records for a type, call `find` with no additional parameters:
-
-    ```javascript
-    store.find('person');
-    ```
-
-    This will ask the adapter's `findAll` method to find the records for the
-    given type, and return a promise that will be resolved once the server
-    returns the values.
-
-    ---
-
-    To find a record by a query, call `find` with a hash as the second
-    parameter:
-
-    ```javascript
-    store.find(App.Person, { page: 1 });
-    ```
-
-    This will ask the adapter's `findQuery` method to find the records for
-    the query, and return a promise that will be resolved once the server
-    responds.
-
-    @method find
-    @param {String or subclass of DS.Model} type
-    @param {Object|String|Integer|null} id
-    @return {Promise} promise
-  */
-  find: function(type, id) {
-    if (id === undefined) {
-      return this.findAll(type);
-    }
-
-    // We are passed a query instead of an id.
-    if (Ember.typeOf(id) === 'object') {
-      return this.findQuery(type, id);
-    }
-
-    return this.findById(type, coerceId(id));
-  },
-
-  /**
-    This method returns a record for a given type and id combination.
-
-    @method findById
-    @private
-    @param {String or subclass of DS.Model} type
-    @param {String|Integer} id
-    @return {Promise} promise
-  */
-  findById: function(type, id) {
-    type = this.modelFor(type);
-
-    var record = this.recordForId(type, id);
-
-    var promise = this.fetchRecord(record) || resolve(record, "DS: Store#findById " + type + " with id: " + id);
-    return promiseObject(promise);
-  },
-
-  /**
-    This method makes a series of requests to the adapter's `find` method
-    and returns a promise that resolves once they are all loaded.
-
-    @private
-    @method findByIds
-    @param {String} type
-    @param {Array} ids
-    @returns {Promise} promise
-  */
-  findByIds: function(type, ids) {
-    var store = this;
-    var promiseLabel = "DS: Store#findByIds " + type;
-    return promiseArray(Ember.RSVP.all(map(ids, function(id) {
-      return store.findById(type, id);
-    })).then(Ember.A, null, "DS: Store#findByIds of " + type + " complete"));
-  },
-
-  /**
-    This method is called by `findById` if it discovers that a particular
-    type/id pair hasn't been loaded yet to kick off a request to the
-    adapter.
-
-    @method fetchRecord
-    @private
-    @param {DS.Model} record
-    @returns {Promise} promise
-  */
-  fetchRecord: function(record) {
-    if (isNone(record)) { return null; }
-    if (record._loadingPromise) { return record._loadingPromise; }
-    if (!get(record, 'isEmpty')) { return null; }
-
-    var type = record.constructor,
-        id = get(record, 'id');
-
-    var adapter = this.adapterFor(type);
-
-    Ember.assert("You tried to find a record but you have no adapter (for " + type + ")", adapter);
-    Ember.assert("You tried to find a record but your adapter (for " + type + ") does not implement 'find'", adapter.find);
-
-    var promise = _find(adapter, this, type, id);
-    record.loadingData(promise);
-    return promise;
-  },
-
-  /**
-    Get a record by a given type and ID without triggering a fetch.
-
-    This method will synchronously return the record if it's available.
-    Otherwise, it will return null.
-
-    ```js
-    var post = store.getById('post', 1);
-    ```
-
-    @method getById
-    @param {String or subclass of DS.Model} type
-    @param {String|Integer} id
-    @param {DS.Model} record
-  */
-  getById: function(type, id) {
-    if (this.hasRecordForId(type, id)) {
-      return this.recordForId(type, id);
-    } else {
-      return null;
-    }
-  },
-
-  /**
-    This method is called by the record's `reload` method.
-
-    This method calls the adapter's `find` method, which returns a promise. When
-    **that** promise resolves, `reloadRecord` will resolve the promise returned
-    by the record's `reload`.
-
-    @method reloadRecord
-    @private
-    @param {DS.Model} record
-    @return {Promise} promise
-  */
-  reloadRecord: function(record) {
-    var type = record.constructor,
-        adapter = this.adapterFor(type),
-        id = get(record, 'id');
-
-    Ember.assert("You cannot reload a record without an ID", id);
-    Ember.assert("You tried to reload a record but you have no adapter (for " + type + ")", adapter);
-    Ember.assert("You tried to reload a record but your adapter does not implement `find`", adapter.find);
-
-    return _find(adapter, this, type, id);
-  },
-
-  /**
-    This method takes a list of records, groups the records by type,
-    converts the records into IDs, and then invokes the adapter's `findMany`
-    method.
-
-    The records are grouped by type to invoke `findMany` on adapters
-    for each unique type in records.
-
-    It is used both by a brand new relationship (via the `findMany`
-    method) or when the data underlying an existing relationship
-    changes.
-
-    @method fetchMany
-    @private
-    @param {Array} records
-    @param {DS.Model} owner
-    @param {Resolver} resolver
-  */
-  fetchMany: function(records, owner, resolver) {
-    if (!records.length) { return; }
-
-    // Group By Type
-    var recordsByTypeMap = Ember.MapWithDefault.create({
-      defaultValue: function() { return Ember.A(); }
-    });
-
-    forEach(records, function(record) {
-      recordsByTypeMap.get(record.constructor).push(record);
-    });
-
-    forEach(recordsByTypeMap, function(type, records) {
-      var ids = records.mapProperty('id'),
-          adapter = this.adapterFor(type);
-
-      Ember.assert("You tried to load many records but you have no adapter (for " + type + ")", adapter);
-      Ember.assert("You tried to load many records but your adapter does not implement `findMany`", adapter.findMany);
-
-      resolver.resolve(_findMany(adapter, this, type, ids, owner));
-    }, this);
-  },
-
-  /**
-    Returns true if a record for a given type and ID is already loaded.
-
-    @method hasRecordForId
-    @param {String or subclass of DS.Model} type
-    @param {String|Integer} id
-    @returns {Boolean}
-  */
-  hasRecordForId: function(type, id) {
-    id = coerceId(id);
-    type = this.modelFor(type);
-    return !!this.typeMapFor(type).idToRecord[id];
-  },
-
-  /**
-    Returns id record for a given type and ID. If one isn't already loaded,
-    it builds a new record and leaves it in the `empty` state.
-
-    @method recordForId
-    @private
-    @param {String or subclass of DS.Model} type
-    @param {String|Integer} id
-    @returns {DS.Model} record
-  */
-  recordForId: function(type, id) {
-    type = this.modelFor(type);
-
-    id = coerceId(id);
-
-    var record = this.typeMapFor(type).idToRecord[id];
-
-    if (!record) {
-      record = this.buildRecord(type, id);
-    }
-
-    return record;
-  },
-
-  /**
-    @method findMany
-    @private
-    @param {DS.Model} owner
-    @param {Array} records
-    @param {String or subclass of DS.Model} type
-    @param {Resolver} resolver
-    @return {DS.ManyArray} records
-  */
-  findMany: function(owner, records, type, resolver) {
-    type = this.modelFor(type);
-
-    records = Ember.A(records);
-
-    var unloadedRecords = records.filterProperty('isEmpty', true),
-        manyArray = this.recordArrayManager.createManyArray(type, records);
-
-    forEach(unloadedRecords, function(record) {
-      record.loadingData();
-    });
-
-    manyArray.loadingRecordsCount = unloadedRecords.length;
-
-    if (unloadedRecords.length) {
-      forEach(unloadedRecords, function(record) {
-        this.recordArrayManager.registerWaitingRecordArray(record, manyArray);
-      }, this);
-
-      this.fetchMany(unloadedRecords, owner, resolver);
-    } else {
-      if (resolver) { resolver.resolve(); }
-      manyArray.set('isLoaded', true);
-      Ember.run.once(manyArray, 'trigger', 'didLoad');
-    }
-
-    return manyArray;
-  },
-
-  /**
-    If a relationship was originally populated by the adapter as a link
-    (as opposed to a list of IDs), this method is called when the
-    relationship is fetched.
-
-    The link (which is usually a URL) is passed through unchanged, so the
-    adapter can make whatever request it wants.
-
-    The usual use-case is for the server to register a URL as a link, and
-    then use that URL in the future to make a request for the relationship.
-
-    @method findHasMany
-    @private
-    @param {DS.Model} owner
-    @param {any} link
-    @param {String or subclass of DS.Model} type
-    @param {Resolver} resolver
-    @return {DS.ManyArray}
-  */
-  findHasMany: function(owner, link, relationship, resolver) {
-    var adapter = this.adapterFor(owner.constructor);
-
-    Ember.assert("You tried to load a hasMany relationship but you have no adapter (for " + owner.constructor + ")", adapter);
-    Ember.assert("You tried to load a hasMany relationship from a specified `link` in the original payload but your adapter does not implement `findHasMany`", adapter.findHasMany);
-
-    var records = this.recordArrayManager.createManyArray(relationship.type, Ember.A([]));
-    resolver.resolve(_findHasMany(adapter, this, owner, link, relationship));
-    return records;
-  },
-
-  /**
-    @method findBelongsTo
-    @private
-    @param {DS.Model} owner
-    @param {any} link
-    @param {Relationship} relationship
-    @param {Resolver} resolver
-  */
-  findBelongsTo: function(owner, link, relationship, resolver) {
-    var adapter = this.adapterFor(owner.constructor);
-
-    Ember.assert("You tried to load a belongsTo relationship but you have no adapter (for " + owner.constructor + ")", adapter);
-    Ember.assert("You tried to load a belongsTo relationship from a specified `link` in the original payload but your adapter does not implement `findBelongsTo`", adapter.findBelongsTo);
-
-    resolver.resolve(_findBelongsTo(adapter, this, owner, link, relationship));
-  },
-
-  /**
-    This method delegates a query to the adapter. This is the one place where
-    adapter-level semantics are exposed to the application.
-
-    Exposing queries this way seems preferable to creating an abstract query
-    language for all server-side queries, and then require all adapters to
-    implement them.
-
-    This method returns a promise, which is resolved with a `RecordArray`
-    once the server returns.
-
-    @method findQuery
-    @private
-    @param {String or subclass of DS.Model} type
-    @param {any} query an opaque query to be used by the adapter
-    @return {Promise} promise
-  */
-  findQuery: function(type, query) {
-    type = this.modelFor(type);
-
-    var array = this.recordArrayManager
-      .createAdapterPopulatedRecordArray(type, query);
-
-    var adapter = this.adapterFor(type),
-        promiseLabel = "DS: Store#findQuery " + type,
-        resolver = Ember.RSVP.defer(promiseLabel);
-
-    Ember.assert("You tried to load a query but you have no adapter (for " + type + ")", adapter);
-    Ember.assert("You tried to load a query but your adapter does not implement `findQuery`", adapter.findQuery);
-
-    resolver.resolve(_findQuery(adapter, this, type, query, array));
-
-    return promiseArray(resolver.promise);
-  },
-
-  /**
-    This method returns an array of all records adapter can find.
-    It triggers the adapter's `findAll` method to give it an opportunity to populate
-    the array with records of that type.
-
-    @method findAll
-    @private
-    @param {String or subclass of DS.Model} type
-    @return {DS.AdapterPopulatedRecordArray}
-  */
-  findAll: function(type) {
-    type = this.modelFor(type);
-
-    return this.fetchAll(type, this.all(type));
-  },
-
-  /**
-    @method fetchAll
-    @private
-    @param {DS.Model} type
-    @param {DS.RecordArray} array
-    @returns {Promise} promise
-  */
-  fetchAll: function(type, array) {
-    var adapter = this.adapterFor(type),
-        sinceToken = this.typeMapFor(type).metadata.since;
-
-    set(array, 'isUpdating', true);
-
-    Ember.assert("You tried to load all records but you have no adapter (for " + type + ")", adapter);
-    Ember.assert("You tried to load all records but your adapter does not implement `findAll`", adapter.findAll);
-
-    return promiseArray(_findAll(adapter, this, type, sinceToken));
-  },
-
-  /**
-    @method didUpdateAll
-    @param {DS.Model} type
-  */
-  didUpdateAll: function(type) {
-    var findAllCache = this.typeMapFor(type).findAllCache;
-    set(findAllCache, 'isUpdating', false);
-  },
-
-  /**
-    This method returns a filtered array that contains all of the known records
-    for a given type.
-
-    Note that because it's just a filter, it will have any locally
-    created records of the type.
-
-    Also note that multiple calls to `all` for a given type will always
-    return the same RecordArray.
-
-    Example
-
-    ```javascript
-    var local_posts = store.all(App.Post);
-    ```
-
-    @method all
-    @param {String or subclass of DS.Model} type
-    @return {DS.RecordArray}
-  */
-  all: function(type) {
-    type = this.modelFor(type);
-
-    var typeMap = this.typeMapFor(type),
-        findAllCache = typeMap.findAllCache;
-
-    if (findAllCache) { return findAllCache; }
-
-    var array = this.recordArrayManager.createRecordArray(type);
-
-    typeMap.findAllCache = array;
-    return array;
-  },
-
-
-  /**
-    This method unloads all of the known records for a given type.
-
-    ```javascript
-    store.unloadAll(App.Post);
-    ```
-
-    @method unloadAll
-    @param {String or subclass of DS.Model} type
-  */
-  unloadAll: function(type) {
-    type = this.modelFor(type);
-
-    var typeMap = this.typeMapFor(type),
-        records = typeMap.records.splice(0), record;
-
-    while(record = records.pop()) {
-      record.unloadRecord();
-    }
-
-    typeMap.findAllCache = null;
-  },
-
-  /**
-    Takes a type and filter function, and returns a live RecordArray that
-    remains up to date as new records are loaded into the store or created
-    locally.
-
-    The callback function takes a materialized record, and returns true
-    if the record should be included in the filter and false if it should
-    not.
-
-    The filter function is called once on all records for the type when
-    it is created, and then once on each newly loaded or created record.
-
-    If any of a record's properties change, or if it changes state, the
-    filter function will be invoked again to determine whether it should
-    still be in the array.
-
-    Optionally you can pass a query which will be triggered at first. The
-    results returned by the server could then appear in the filter if they
-    match the filter function.
-
-    Example
-
-    ```javascript
-    store.filter(App.Post, {unread: true}, function(post) {
-      return post.get('unread');
-    }).then(function(unreadPosts) {
-      unreadPosts.get('length'); // 5
-      var unreadPost = unreadPosts.objectAt(0);
-      unreadPost.set('unread', false);
-      unreadPosts.get('length'); // 4
-    });
-    ```
-
-    @method filter
-    @param {String or subclass of DS.Model} type
-    @param {Object} query optional query
-    @param {Function} filter
-    @return {DS.PromiseArray}
-  */
-  filter: function(type, query, filter) {
-    var promise;
-
-    // allow an optional server query
-    if (arguments.length === 3) {
-      promise = this.findQuery(type, query);
-    } else if (arguments.length === 2) {
-      filter = query;
-    }
-
-    type = this.modelFor(type);
-
-    var array = this.recordArrayManager
-      .createFilteredRecordArray(type, filter);
-    promise = promise || resolve(array);
-
-    return promiseArray(promise.then(function() {
-      return array;
-    }, null, "DS: Store#filter of " + type));
-  },
-
-  /**
-    This method returns if a certain record is already loaded
-    in the store. Use this function to know beforehand if a find()
-    will result in a request or that it will be a cache hit.
-
-     Example
-
-    ```javascript
-    store.recordIsLoaded(App.Post, 1); // false
-    store.find(App.Post, 1).then(function() {
-      store.recordIsLoaded(App.Post, 1); // true
-    });
-    ```
-
-    @method recordIsLoaded
-    @param {String or subclass of DS.Model} type
-    @param {string} id
-    @return {boolean}
-  */
-  recordIsLoaded: function(type, id) {
-    if (!this.hasRecordForId(type, id)) { return false; }
-    return !get(this.recordForId(type, id), 'isEmpty');
-  },
-
-  /**
-    This method returns the metadata for a specific type.
-
-    @method metadataFor
-    @param {String or subclass of DS.Model} type
-    @return {object}
-  */
-  metadataFor: function(type) {
-    type = this.modelFor(type);
-    return this.typeMapFor(type).metadata;
-  },
-
-  // ............
-  // . UPDATING .
-  // ............
-
-  /**
-    If the adapter updates attributes or acknowledges creation
-    or deletion, the record will notify the store to update its
-    membership in any filters.
-    To avoid thrashing, this method is invoked only once per
-
-    run loop per record.
-
-    @method dataWasUpdated
-    @private
-    @param {Class} type
-    @param {DS.Model} record
-  */
-  dataWasUpdated: function(type, record) {
-    this.recordArrayManager.recordDidChange(record);
-  },
-
-  // ..............
-  // . PERSISTING .
-  // ..............
-
-  /**
-    This method is called by `record.save`, and gets passed a
-    resolver for the promise that `record.save` returns.
-
-    It schedules saving to happen at the end of the run loop.
-
-    @method scheduleSave
-    @private
-    @param {DS.Model} record
-    @param {Resolver} resolver
-  */
-  scheduleSave: function(record, resolver) {
-    record.adapterWillCommit();
-    this._pendingSave.push([record, resolver]);
-    once(this, 'flushPendingSave');
-  },
-
-  /**
-    This method is called at the end of the run loop, and
-    flushes any records passed into `scheduleSave`
-
-    @method flushPendingSave
-    @private
-  */
-  flushPendingSave: function() {
-    var pending = this._pendingSave.slice();
-    this._pendingSave = [];
-
-    forEach(pending, function(tuple) {
-      var record = tuple[0], resolver = tuple[1],
-          adapter = this.adapterFor(record.constructor),
-          operation;
-
-      if (get(record, 'isNew')) {
-        operation = 'createRecord';
-      } else if (get(record, 'isDeleted')) {
-        operation = 'deleteRecord';
-      } else {
-        operation = 'updateRecord';
-      }
-
-      resolver.resolve(_commit(adapter, this, operation, record));
-    }, this);
-  },
-
-  /**
-    This method is called once the promise returned by an
-    adapter's `createRecord`, `updateRecord` or `deleteRecord`
-    is resolved.
-
-    If the data provides a server-generated ID, it will
-    update the record and the store's indexes.
-
-    @method didSaveRecord
-    @private
-    @param {DS.Model} record the in-flight record
-    @param {Object} data optional data (see above)
-  */
-  didSaveRecord: function(record, data) {
-    if (data) {
-      // normalize relationship IDs into records
-      data = normalizeRelationships(this, record.constructor, data, record);
-
-      this.updateId(record, data);
-    }
-
-    record.adapterDidCommit(data);
-  },
-
-  /**
-    This method is called once the promise returned by an
-    adapter's `createRecord`, `updateRecord` or `deleteRecord`
-    is rejected with a `DS.InvalidError`.
-
-    @method recordWasInvalid
-    @private
-    @param {DS.Model} record
-    @param {Object} errors
-  */
-  recordWasInvalid: function(record, errors) {
-    record.adapterDidInvalidate(errors);
-  },
-
-  /**
-    This method is called once the promise returned by an
-    adapter's `createRecord`, `updateRecord` or `deleteRecord`
-    is rejected (with anything other than a `DS.InvalidError`).
-
-    @method recordWasError
-    @private
-    @param {DS.Model} record
-  */
-  recordWasError: function(record) {
-    record.adapterDidError();
-  },
-
-  /**
-    When an adapter's `createRecord`, `updateRecord` or `deleteRecord`
-    resolves with data, this method extracts the ID from the supplied
-    data.
-
-    @method updateId
-    @private
-    @param {DS.Model} record
-    @param {Object} data
-  */
-  updateId: function(record, data) {
-    var oldId = get(record, 'id'),
-        id = coerceId(data.id);
-
-    Ember.assert("An adapter cannot assign a new id to a record that already has an id. " + record + " had id: " + oldId + " and you tried to update it with " + id + ". This likely happened because your server returned data in response to a find or update that had a different id than the one you sent.", oldId === null || id === oldId);
-
-    this.typeMapFor(record.constructor).idToRecord[id] = record;
-
-    set(record, 'id', id);
-  },
-
-  /**
-    Returns a map of IDs to client IDs for a given type.
-
-    @method typeMapFor
-    @private
-    @param type
-    @return {Object} typeMap
-  */
-  typeMapFor: function(type) {
-    var typeMaps = get(this, 'typeMaps'),
-        guid = Ember.guidFor(type),
-        typeMap;
-
-    typeMap = typeMaps[guid];
-
-    if (typeMap) { return typeMap; }
-
-    typeMap = {
-      idToRecord: {},
-      records: [],
-      metadata: {}
-    };
-
-    typeMaps[guid] = typeMap;
-
-    return typeMap;
-  },
-
-  // ................
-  // . LOADING DATA .
-  // ................
-
-  /**
-    This internal method is used by `push`.
-
-    @method _load
-    @private
-    @param {String or subclass of DS.Model} type
-    @param {Object} data
-    @param {Boolean} partial the data should be merged into
-      the existing data, not replace it.
-  */
-  _load: function(type, data, partial) {
-    var id = coerceId(data.id),
-        record = this.recordForId(type, id);
-
-    record.setupData(data, partial);
-    this.recordArrayManager.recordDidChange(record);
-
-    return record;
-  },
-
-  /**
-    Returns a model class for a particular key. Used by
-    methods that take a type key (like `find`, `createRecord`,
-    etc.)
-
-    @method modelFor
-    @param {String or subclass of DS.Model} key
-    @returns {subclass of DS.Model}
-  */
-  modelFor: function(key) {
-    var factory;
-
-
-    if (typeof key === 'string') {
-      var normalizedKey = this.container.normalize('model:' + key);
-
-      factory = this.container.lookupFactory(normalizedKey);
-      if (!factory) { throw new Ember.Error("No model was found for '" + key + "'"); }
-      factory.typeKey = normalizedKey.split(':', 2)[1];
-    } else {
-      // A factory already supplied.
-      factory = key;
-    }
-
-    factory.store = this;
-    return factory;
-  },
-
-  /**
-    Push some data for a given type into the store.
-
-    This method expects normalized data:
-
-    * The ID is a key named `id` (an ID is mandatory)
-    * The names of attributes are the ones you used in
-      your model's `DS.attr`s.
-    * Your relationships must be:
-      * represented as IDs or Arrays of IDs
-      * represented as model instances
-      * represented as URLs, under the `links` key
-
-    For this model:
-
-    ```js
-    App.Person = DS.Model.extend({
-      firstName: DS.attr(),
-      lastName: DS.attr(),
-
-      children: DS.hasMany('person')
-    });
-    ```
-
-    To represent the children as IDs:
-
-    ```js
-    {
-      id: 1,
-      firstName: "Tom",
-      lastName: "Dale",
-      children: [1, 2, 3]
-    }
-    ```
-
-    To represent the children relationship as a URL:
-
-    ```js
-    {
-      id: 1,
-      firstName: "Tom",
-      lastName: "Dale",
-      links: {
-        children: "/people/1/children"
-      }
-    }
-    ```
-
-    If you're streaming data or implementing an adapter,
-    make sure that you have converted the incoming data
-    into this form.
-
-    This method can be used both to push in brand new
-    records, as well as to update existing records.
-
-    @method push
-    @param {String or subclass of DS.Model} type
-    @param {Object} data
-    @returns {DS.Model} the record that was created or
-      updated.
-  */
-  push: function(type, data, _partial) {
-    // _partial is an internal param used by `update`.
-    // If passed, it means that the data should be
-    // merged into the existing data, not replace it.
-
-    Ember.assert("You must include an `id` in a hash passed to `push`", data.id != null);
-
-    type = this.modelFor(type);
-
-    // normalize relationship IDs into records
-    data = normalizeRelationships(this, type, data);
-
-    this._load(type, data, _partial);
-
-    return this.recordForId(type, data.id);
-  },
-
-  /**
-    Push some raw data into the store.
-
-    The data will be automatically deserialized using the
-    serializer for the `type` param.
-
-    This method can be used both to push in brand new
-    records, as well as to update existing records.
-
-    You can push in more than one type of object at once.
-    All objects should be in the format expected by the
-    serializer.
-
-    ```js
-    App.ApplicationSerializer = DS.ActiveModelSerializer;
-
-    var pushData = {
-      posts: [
-        {id: 1, post_title: "Great post", comment_ids: [2]}
-      ],
-      comments: [
-        {id: 2, comment_body: "Insightful comment"}
-      ]
-    }
-
-    store.pushPayload('post', pushData);
-    ```
-
-    @method pushPayload
-    @param {String} type
-    @param {Object} payload
-    @return {DS.Model} the record that was created or updated.
-  */
-  pushPayload: function (type, payload) {
-    var serializer;
-    if (!payload) {
-      payload = type;
-      serializer = defaultSerializer(this.container);
-      Ember.assert("You cannot use `store#pushPayload` without a type unless your default serializer defines `pushPayload`", serializer.pushPayload);
-    } else {
-      serializer = this.serializerFor(type);
-    }
-    serializer.pushPayload(this, payload);
-  },
-
-  update: function(type, data) {
-    Ember.assert("You must include an `id` in a hash passed to `update`", data.id != null);
-
-    return this.push(type, data, true);
-  },
-
-  /**
-    If you have an Array of normalized data to push,
-    you can call `pushMany` with the Array, and it will
-    call `push` repeatedly for you.
-
-    @method pushMany
-    @param {String or subclass of DS.Model} type
-    @param {Array} datas
-    @return {Array}
-  */
-  pushMany: function(type, datas) {
-    return map(datas, function(data) {
-      return this.push(type, data);
-    }, this);
-  },
-
-  /**
-    If you have some metadata to set for a type
-    you can call `metaForType`.
-
-    @method metaForType
-    @param {String or subclass of DS.Model} type
-    @param {Object} metadata
-  */
-  metaForType: function(type, metadata) {
-    type = this.modelFor(type);
-
-    Ember.merge(this.typeMapFor(type).metadata, metadata);
-  },
-
-  /**
-    Build a brand new record for a given type, ID, and
-    initial data.
-
-    @method buildRecord
-    @private
-    @param {subclass of DS.Model} type
-    @param {String} id
-    @param {Object} data
-    @returns {DS.Model} record
-  */
-  buildRecord: function(type, id, data) {
-    var typeMap = this.typeMapFor(type),
-        idToRecord = typeMap.idToRecord;
-
-    Ember.assert('The id ' + id + ' has already been used with another record of type ' + type.toString() + '.', !id || !idToRecord[id]);
-
-    // lookupFactory should really return an object that creates
-    // instances with the injections applied
-    var record = type._create({
-      id: id,
-      store: this,
-      container: this.container
-    });
-
-    if (data) {
-      record.setupData(data);
-    }
-
-    // if we're creating an item, this process will be done
-    // later, once the object has been persisted.
-    if (id) {
-      idToRecord[id] = record;
-    }
-
-    typeMap.records.push(record);
-
-    return record;
-  },
-
-  // ...............
-  // . DESTRUCTION .
-  // ...............
-
-  /**
-    When a record is destroyed, this un-indexes it and
-    removes it from any record arrays so it can be GCed.
-
-    @method dematerializeRecord
-    @private
-    @param {DS.Model} record
-  */
-  dematerializeRecord: function(record) {
-    var type = record.constructor,
-        typeMap = this.typeMapFor(type),
-        id = get(record, 'id');
-
-    record.updateRecordArrays();
-
-    if (id) {
-      delete typeMap.idToRecord[id];
-    }
-
-    var loc = indexOf(typeMap.records, record);
-    typeMap.records.splice(loc, 1);
-  },
-
-  // ........................
-  // . RELATIONSHIP CHANGES .
-  // ........................
-
-  addRelationshipChangeFor: function(childRecord, childKey

<TRUNCATED>

[38/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariServiceInfo.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariServiceInfo.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariServiceInfo.java
deleted file mode 100644
index 9d2fb31..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariServiceInfo.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider.clients;
-
-public class AmbariServiceInfo {
-
-	private String id;
-	private boolean started;
-	private boolean maintenanceMode;
-
-	public String getId() {
-		return id;
-	}
-
-	public void setId(String id) {
-		this.id = id;
-	}
-
-	public boolean isStarted() {
-	  return started;
-  }
-
-	public void setStarted(boolean started) {
-	  this.started = started;
-  }
-
-	public boolean isMaintenanceMode() {
-	  return maintenanceMode;
-  }
-
-	public void setMaintenanceMode(boolean maintenanceMode) {
-	  this.maintenanceMode = maintenanceMode;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppTypesResource.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppTypesResource.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppTypesResource.java
deleted file mode 100644
index fa2a71c..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppTypesResource.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider.rest;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.UriInfo;
-
-import org.apache.ambari.view.ViewResourceHandler;
-
-import com.google.inject.Inject;
-
-public class SliderAppTypesResource {
-
-	@Inject
-	ViewResourceHandler resourceHandler;
-
-	@GET
-	@Produces({ MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON })
-	public Response getApps(@Context HttpHeaders headers, @Context UriInfo uri) {
-		return resourceHandler.handleRequest(headers, uri, null);
-	}
-
-	@GET
-	@Path("{appTypeId}")
-	@Produces({ MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON })
-	public Response getApp(@Context HttpHeaders headers, @Context UriInfo uri,
-	    @PathParam("appTypeId") String appTypeId) {
-		return resourceHandler.handleRequest(headers, uri, appTypeId);
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppsResource.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppsResource.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppsResource.java
deleted file mode 100644
index 94d37d3..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppsResource.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider.rest;
-
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.Status;
-import javax.ws.rs.core.UriInfo;
-
-import org.apache.ambari.view.ViewResourceHandler;
-import org.apache.ambari.view.slider.SliderAppsViewController;
-import org.apache.hadoop.yarn.exceptions.YarnException;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import com.google.inject.Inject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class SliderAppsResource {
-
-  private static final Logger logger = LoggerFactory
-      .getLogger(SliderAppsResource.class);
-  @Inject
-  ViewResourceHandler resourceHandler;
-  @Inject
-  SliderAppsViewController sliderAppsViewController;
-
-  @GET
-  @Produces({ MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON })
-  public Response getApps(@Context HttpHeaders headers, @Context UriInfo uri) {
-    MultivaluedMap<String, String> queryParameters = uri.getQueryParameters();
-    if (queryParameters != null && queryParameters.containsKey("validateAppName")) {
-      List<String> appNames = queryParameters.get("validateAppName");
-      if (appNames.size() > 0) {
-        try {
-          if (sliderAppsViewController.appExists(appNames.get(0))) {
-            return Response.status(Status.CONFLICT).build();
-          }
-        } catch (IOException e) {
-          logger.warn("Unable to validate cluster name", e);
-        } catch (InterruptedException e) {
-          logger.warn("Unable to validate cluster name", e);
-        } catch (YarnException e) {
-          logger.warn("Unable to validate cluster name", e);
-        }
-        return Response.ok().build();
-      }
-    }
-    return resourceHandler.handleRequest(headers, uri, null);
-  }
-
-  @GET
-  @Path("{appId}")
-  @Produces({ MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON })
-  public Response getApp(@Context HttpHeaders headers, @Context UriInfo uri,
-      @PathParam("appId") String appId) {
-    return resourceHandler.handleRequest(headers, uri, appId);
-  }
-
-  @DELETE
-  @Path("{appId}")
-  public void deleteApp(@Context HttpHeaders headers, @Context UriInfo uri,
-      @PathParam("appId") String appId) throws YarnException, IOException, InterruptedException {
-    sliderAppsViewController.deleteSliderApp(appId);
-  }
-
-  @PUT
-  @Path("{appId}")
-  @Consumes({ MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON })
-  public Response updateApp(@Context UriInfo uri, String jsonString,
-      @PathParam("appId") String appId) throws IOException, YarnException,
-      InterruptedException, URISyntaxException {
-    if (jsonString != null) {
-      JsonElement requestContent = new JsonParser().parse(jsonString);
-      if (requestContent != null && appId != null) {
-        JsonObject requestJson = requestContent.getAsJsonObject();
-        if (requestJson.has("state")) {
-          String newState = requestJson.get("state").getAsString();
-          if ("FROZEN".equals(newState)) {
-            sliderAppsViewController.freezeApp(appId);
-            return Response.ok().build();
-          } else if ("RUNNING".equals(newState)) {
-            sliderAppsViewController.thawApp(appId);
-            return Response.ok().build();
-          }
-        } else if (requestJson.has("components")) {
-          Map<String, Integer> componentsMap = new HashMap<String, Integer>();
-          JsonObject componentsJson = requestJson.get("components")
-              .getAsJsonObject();
-          for (Entry<String, JsonElement> e : componentsJson.entrySet()) {
-            String componentName = e.getKey();
-            int instanceCount = e.getValue().getAsJsonObject()
-                .get("instanceCount").getAsInt();
-            componentsMap.put(componentName, instanceCount);
-          }
-          sliderAppsViewController.flexApp(appId, componentsMap);
-          return Response.ok().build();
-        }
-      }
-      String sliderApp = sliderAppsViewController
-          .createSliderApp(requestContent.getAsJsonObject());
-      if (sliderApp != null)
-        return Response.created(new URI(uri.getAbsolutePath() + sliderApp))
-            .build();
-    }
-    logger.warn("No request content sent to create app");
-    return Response.status(Response.Status.BAD_REQUEST).build();
-  }
-
-  @POST
-  @Consumes({ MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON })
-  public Response createApp(@Context UriInfo uri, String jsonString)
-      throws IOException, YarnException, InterruptedException,
-      URISyntaxException {
-    if (jsonString != null) {
-      JsonElement requestContent = new JsonParser().parse(jsonString);
-      String sliderApp = sliderAppsViewController
-          .createSliderApp(requestContent.getAsJsonObject());
-      if (sliderApp != null)
-        return Response.created(new URI(uri.getAbsolutePath() + sliderApp))
-            .build();
-    }
-    logger.warn("No request content sent to create app");
-    return Response.status(Response.Status.BAD_REQUEST).build();
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/ViewStatusResource.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/ViewStatusResource.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/ViewStatusResource.java
deleted file mode 100644
index 5023d90..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/ViewStatusResource.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider.rest;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-
-import org.apache.ambari.view.slider.SliderAppsViewController;
-import org.apache.ambari.view.slider.ViewStatus;
-
-import com.google.inject.Inject;
-
-public class ViewStatusResource {
-
-	@Inject
-	SliderAppsViewController sliderController;
-
-	@GET
-	@Produces({ MediaType.APPLICATION_JSON })
-	public ViewStatus getViewStatus() {
-		return sliderController.getViewStatus();
-	}
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/AmbariHttpClient.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/AmbariHttpClient.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/AmbariHttpClient.java
deleted file mode 100644
index 74578c9..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/AmbariHttpClient.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider.rest.client;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.apache.ambari.view.ViewContext;
-import org.apache.ambari.view.slider.clients.AmbariClient;
-import org.apache.ambari.view.slider.clients.AmbariCluster;
-import org.apache.ambari.view.slider.clients.AmbariClusterInfo;
-import org.apache.ambari.view.slider.clients.AmbariHostComponent;
-import org.apache.ambari.view.slider.clients.AmbariHostInfo;
-import org.apache.ambari.view.slider.clients.AmbariService;
-import org.apache.ambari.view.slider.clients.AmbariServiceInfo;
-
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class AmbariHttpClient extends BaseHttpClient implements AmbariClient {
-
-	private static final Logger logger = LoggerFactory.getLogger(AmbariHttpClient.class);
-
-	public AmbariHttpClient(String url, String userId, String password,
-			ViewContext viewContext) {
-		super(url, userId, password, viewContext);
-	}
-
-    /**
-     * Provides the first cluster defined on this Ambari server.
-     * 
-     * @return
-     */
-    public AmbariClusterInfo getClusterInfo() {
-        try {
-            JsonElement jsonElement = doGetJson("/api/v1/clusters");
-            if(jsonElement==null) {
-              return null;
-            }
-            JsonObject jsonObject = jsonElement.getAsJsonObject();
-            JsonArray clustersArray = jsonObject.get("items").getAsJsonArray();
-            if (clustersArray.size() > 0) {
-                AmbariClusterInfo cluster = new AmbariClusterInfo();
-                JsonObject clusterObj = clustersArray.get(0).getAsJsonObject()
-                    .get("Clusters").getAsJsonObject();
-                cluster.setName(clusterObj.get("cluster_name").getAsString());
-                cluster.setVersion(clusterObj.get("version").getAsString());
-                return cluster;
-            }
-        } catch (IOException e) {
-            logger.warn("Unable to determine Ambari clusters", e);
-            throw new RuntimeException(e.getMessage(), e);
-        }
-        return null;
-    }
-
-    /**
-     * Provides the first cluster defined on this Ambari server.
-     * 
-     * @return
-     */
-    public Map<String, String> getAmbariServerConfigs() {
-      Map<String, String> configs = new HashMap<String, String>();
-      try {
-        JsonElement jsonElement = doGetJson("/api/v1/services/AMBARI/components/AMBARI_SERVER");
-        if (jsonElement != null && jsonElement.getAsJsonObject().has("RootServiceComponents")
-            && jsonElement.getAsJsonObject().get("RootServiceComponents").getAsJsonObject().has("properties")) {
-          JsonObject ambariProperties = jsonElement.getAsJsonObject().get("RootServiceComponents").getAsJsonObject().get("properties").getAsJsonObject();
-          for (Entry<String, JsonElement> entry : ambariProperties.entrySet()) {
-            if (entry.getValue().isJsonPrimitive()) {
-              configs.put(entry.getKey(), entry.getValue().getAsString());
-            }
-          }
-        }
-      } catch (IOException e) {
-        logger.warn("Unable to determine Ambari clusters", e);
-      }
-      return configs;
-    }
-
-	public AmbariCluster getCluster(AmbariClusterInfo clusterInfo) {
-		if (clusterInfo != null) {
-			try {
-				JsonElement jsonElement = doGetJson("/api/v1/clusters/"
-				    + clusterInfo.getName() + "?fields=services/ServiceInfo,hosts,Clusters");
-				if (jsonElement != null) {
-					AmbariCluster cluster = new AmbariCluster();
-					// desired configs
-					Map<String, String> desiredConfigs = new HashMap<String, String>();
-					JsonObject jsonObject = jsonElement.getAsJsonObject();
-                    JsonObject clustersJsonObject = jsonObject.get("Clusters").getAsJsonObject();
-                    JsonObject desiredConfigsObj = clustersJsonObject.get("desired_configs")
-					    .getAsJsonObject();
-					for (Map.Entry<String, JsonElement> entry : desiredConfigsObj
-					    .entrySet()) {
-						desiredConfigs.put(entry.getKey(), entry.getValue()
-						    .getAsJsonObject().get("tag").getAsString());
-					}
-					cluster.setDesiredConfigs(desiredConfigs);
-					cluster.setName(clustersJsonObject.get("cluster_name").getAsString());
-					cluster.setVersion(clustersJsonObject.get("version").getAsString());
-					// services
-                    List<AmbariServiceInfo> services = new ArrayList<AmbariServiceInfo>();
-                    for (JsonElement svcJson : jsonObject.get("services")
-                        .getAsJsonArray()) {
-                      AmbariServiceInfo si = new AmbariServiceInfo();
-                      si.setId(svcJson.getAsJsonObject().get("ServiceInfo")
-                          .getAsJsonObject().get("service_name").getAsString());
-                      si.setStarted("STARTED".equals(svcJson.getAsJsonObject()
-                          .get("ServiceInfo").getAsJsonObject().get("state")
-                          .getAsString()));
-                      services.add(si);
-                    }
-					cluster.setServices(services);
-					// hosts
-					List<AmbariHostInfo> hosts = new ArrayList<AmbariHostInfo>();
-					for (JsonElement hostJson : jsonObject.get("hosts")
-                        .getAsJsonArray()) {
-                      AmbariHostInfo hi = new AmbariHostInfo();
-                      hi.setHostName(hostJson.getAsJsonObject().get("Hosts")
-                          .getAsJsonObject().get("host_name").getAsString());
-                      hosts.add(hi);
-                    }
-					cluster.setHosts(hosts);
-					return cluster;
-				}
-			} catch (IllegalStateException e) {
-			  logger.warn("Unable to determine Ambari cluster details - "
-			      + clusterInfo.getName(), e);
-			  throw new RuntimeException(e.getMessage(), e);
-			} catch (IOException e) {
-				logger.warn("Unable to determine Ambari cluster details - "
-				    + clusterInfo.getName(), e);
-				throw new RuntimeException(e.getMessage(), e);
-			}
-		}
-		return null;
-	}
-
-	public Map<String, String> getConfiguration(AmbariClusterInfo cluster,
-	    String configType, String configTag) {
-		if (cluster != null && configType != null && configTag != null) {
-			try {
-				JsonElement jsonElement = doGetJson("/api/v1/clusters/"
-				    + cluster.getName() + "/configurations?type=" + configType
-				    + "&tag=" + configTag);
-				if (jsonElement!=null) {
-				  JsonObject jsonObject = jsonElement.getAsJsonObject();
-				  JsonArray configsArray = jsonObject.get("items").getAsJsonArray();
-				  if (configsArray.size() > 0) {
-				    JsonObject propertiesObj = configsArray.get(0).getAsJsonObject()
-				        .get("properties").getAsJsonObject();
-				    Map<String, String> properties = new HashMap<String, String>();
-				    for (Map.Entry<String, JsonElement> entry : propertiesObj.entrySet()) {
-                                      if (entry.getValue().isJsonPrimitive()) {
-                                        properties.put(entry.getKey(), entry.getValue().getAsString());
-                                      }
-				    }
-				    return properties;
-				  }
-				}
-			} catch (IOException e) {
-				logger.warn("Unable to determine Ambari clusters", e);
-				throw new RuntimeException(e.getMessage(), e);
-			}
-		}
-		return null;
-	}
-
-	@Override
-	public AmbariService getService(AmbariClusterInfo cluster, String serviceId) {
-      if (cluster != null && serviceId != null) {
-        try {
-            JsonElement jsonElement = doGetJson("/api/v1/clusters/"
-                + cluster.getName() + "/services/" + serviceId + "?fields=ServiceInfo,components/host_components/HostRoles");
-            if (jsonElement == null) {
-              return null;
-            }
-            JsonObject jsonObject = jsonElement.getAsJsonObject();
-            AmbariService svc = new AmbariService();
-            JsonObject serviceInfoJsonObject = jsonObject.get("ServiceInfo").getAsJsonObject();
-            svc.setId(serviceInfoJsonObject.get("service_name").getAsString());
-            svc.setStarted("STARTED".equals(serviceInfoJsonObject.get("state").getAsString()));
-            svc.setMaintenanceMode(!"OFF".equals(serviceInfoJsonObject.get("maintenance_state").getAsString()));
-            Map<String, List<AmbariHostComponent>> componentsToHostComponentsMap = new HashMap<String, List<AmbariHostComponent>>();
-            for(JsonElement ce: jsonObject.get("components").getAsJsonArray()){
-              String componentName = ce.getAsJsonObject().get("ServiceComponentInfo").getAsJsonObject().get("component_name").getAsString();
-              List<AmbariHostComponent> hcList = new ArrayList<AmbariHostComponent>();
-              componentsToHostComponentsMap.put(componentName, hcList);
-              JsonArray hcJsonArray = ce.getAsJsonObject().get("host_components").getAsJsonArray();
-              for(JsonElement hce: hcJsonArray) {
-                AmbariHostComponent hc = new AmbariHostComponent();
-                JsonObject hcJsonObject = hce.getAsJsonObject().get("HostRoles").getAsJsonObject();
-                hc.setHostName(hcJsonObject.get("host_name").getAsString());
-                hc.setStarted("STARTED".equals(hcJsonObject.get("state").getAsString()));
-                hc.setName(hcJsonObject.get("component_name").getAsString());
-                hcList.add(hc);
-              }
-            }
-            svc.setComponentsToHostComponentsMap(componentsToHostComponentsMap);
-            return svc;
-        } catch (IOException e) {
-            logger.warn("Unable to determine Ambari clusters", e);
-            throw new RuntimeException(e.getMessage(), e);
-        }
-    }
-    return null;
-}
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/BaseHttpClient.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/BaseHttpClient.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/BaseHttpClient.java
deleted file mode 100644
index bfc4d3a..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/BaseHttpClient.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider.rest.client;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.ambari.view.URLStreamProvider;
-import org.apache.ambari.view.ViewContext;
-import org.apache.ambari.view.utils.ambari.AmbariApi;
-import org.apache.commons.io.IOUtils;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParser;
-import com.google.gson.stream.JsonReader;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class BaseHttpClient {
-	private static final Logger logger = LoggerFactory.getLogger(BaseHttpClient.class);
-
-	private String url;
-	private boolean needsAuthentication;
-	private String userId;
-	private String password;
-	protected ViewContext viewContext;
-	protected AmbariApi ambariApi;
-
-	public BaseHttpClient(String url, ViewContext viewContext) {
-		setUrl(url);
-		setNeedsAuthentication(false);
-		setViewContext(viewContext);
-		if (viewContext != null) {
-			ambariApi = new AmbariApi(viewContext);
-		}
-	}
-
-	public BaseHttpClient(String url, String userId, String password,
-			ViewContext viewContext) {
-		setUrl(url);
-		setNeedsAuthentication(true);
-		setUserId(userId);
-		setPassword(password);
-		setViewContext(viewContext);
-		if (viewContext != null) {
-			ambariApi = new AmbariApi(viewContext);
-		}
-	}
-
-	public void setViewContext(ViewContext viewContext) {
-		this.viewContext = viewContext;
-	}
-
-	public URLStreamProvider getUrlStreamProvider() {
-		return viewContext.getURLStreamProvider();
-	}
-
-	public URLStreamProviderBasicAuth getUrlStreamProviderBasicAuth() {
-		return new URLStreamProviderBasicAuth(getUrlStreamProvider(),getUserId(),getPassword());
-	}
-
-	public String getUrl() {
-		return url;
-	}
-
-	public void setUrl(String url) {
-		this.url = url;
-	}
-
-	public boolean isNeedsAuthentication() {
-		return needsAuthentication;
-	}
-
-	public void setNeedsAuthentication(boolean needsAuthentication) {
-		this.needsAuthentication = needsAuthentication;
-	}
-
-	public String getUserId() {
-		return userId;
-	}
-
-	public void setUserId(String userId) {
-		this.userId = userId;
-	}
-
-	public String getPassword() {
-		return password;
-	}
-
-	public void setPassword(String password) {
-		this.password = password;
-	}
-
-	public JsonElement doGetJson(String path) throws IOException {
-		return doGetJson(getUrl(), path);
-	}
-
-	public JsonElement doGetJson(String url, String path) throws IOException {
-		InputStream inputStream = null;
-		try {
-			Map<String, String> headers = new HashMap<String, String>();
-			if (isNeedsAuthentication()) {
-				inputStream = getUrlStreamProviderBasicAuth().readFrom(
-						url + path, "GET", (String) null, headers);
-			} else {
-				inputStream = getUrlStreamProvider().readAsCurrent(
-						url + path, "GET", (String) null, headers);
-			}
-		} catch (IOException e) {
-			logger.error("Error while reading from url " + url + path, e);
-			throw e;
-		}
-		JsonElement jsonElement = new JsonParser().parse(new JsonReader(
-				new InputStreamReader(inputStream)));
-		return jsonElement;
-	}
-
-	public String doGet(String path) throws IOException {
-		String response = null;
-		try {
-			InputStream inputStream = null;
-			if (isNeedsAuthentication()) {
-				inputStream = getUrlStreamProviderBasicAuth().readFrom(
-						getUrl() + path, "GET", (String) null,
-						new HashMap<String, String>());
-			} else {
-				inputStream = getUrlStreamProvider().readAsCurrent(
-						getUrl() + path, "GET", (String) null,
-						new HashMap<String, String>());
-			}
-			response = IOUtils.toString(inputStream);
-		} catch (IOException e) {
-			logger.error("Error while reading from url " + getUrl() + path, e);
-			throw e;
-		}
-		return response;
-	}
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/JMXMetricHolder.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/JMXMetricHolder.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/JMXMetricHolder.java
deleted file mode 100644
index 04b824a..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/JMXMetricHolder.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider.rest.client;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- *
- */
-public final class JMXMetricHolder {
-
-  private List<Map<String, Object>> beans;
-
-  public List<Map<String, Object>> getBeans() {
-    return beans;
-  }
-
-  public void setBeans(List<Map<String, Object>> beans) {
-    this.beans = beans;
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder stringBuilder = new StringBuilder();
-
-    for (Map<String, Object> map : beans) {
-      for (Map.Entry<String, Object> entry : map.entrySet()) {
-        stringBuilder.append("    ").append(entry.toString()).append("\n");
-      }
-    }
-    return stringBuilder.toString();
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/Metric.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/Metric.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/Metric.java
deleted file mode 100644
index 1ec682b..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/Metric.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider.rest.client;
-
-import org.codehaus.jackson.annotate.JsonIgnore;
-import org.codehaus.jackson.annotate.JsonIgnoreProperties;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathExpression;
-import javax.xml.xpath.XPathExpressionException;
-import javax.xml.xpath.XPathFactory;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@JsonIgnoreProperties({"keyName", "matchers", "xPathExpression", "xPathExpressionComputed"})
-public class Metric {
-  private static final Logger logger = LoggerFactory
-      .getLogger(Metric.class);
-  private static String SEPARATOR = ".";
-  private static char SEPARATOR_REPLACED = '#';
-  private String metric;
-  private boolean pointInTime;
-  private boolean temporal;
-  @JsonIgnore
-  private String keyName = null;
-  @JsonIgnore
-  private List<List<String>> matchers = null;
-  @JsonIgnore
-  private XPathExpression xPathExpression = null;
-  @JsonIgnore
-  private boolean xPathExpressionComputed = false;
-
-  private Metric() {
-  }
-
-  protected Metric(String metric, boolean pointInTime, boolean temporal) {
-    this.metric = metric;
-    this.pointInTime = pointInTime;
-    this.temporal = temporal;
-  }
-
-  public String getMetric() {
-    return metric;
-  }
-
-  public void setMetric(String metric) {
-    this.metric = metric;
-  }
-
-  public boolean isPointInTime() {
-    return pointInTime;
-  }
-
-  public void setPointInTime(boolean pointInTime) {
-    this.pointInTime = pointInTime;
-  }
-
-  public boolean isTemporal() {
-    return temporal;
-  }
-
-  public void setTemporal(boolean temporal) {
-    this.temporal = temporal;
-  }
-
-  @JsonIgnore
-  public XPathExpression getxPathExpression() {
-    if (!xPathExpressionComputed) {
-      XPathFactory xPathfactory = XPathFactory.newInstance();
-      XPath xpath = xPathfactory.newXPath();
-      XPathExpression schemaPath = null;
-      try {
-        schemaPath = xpath.compile(metric);
-      } catch (XPathExpressionException e) {
-        logger.info(String.format("Unable to compile %s into xpath expression", metric));
-      }
-      xPathExpression = schemaPath;
-      xPathExpressionComputed = true;
-    }
-
-    return xPathExpression;
-  }
-
-  @JsonIgnore
-  public String getJmxBeanKeyName() {
-    if (keyName == null) {
-      int firstIndex = metric.indexOf(SEPARATOR);
-      if (firstIndex > 0) {
-        keyName = metric.substring(0, firstIndex).replace(SEPARATOR_REPLACED, '.');
-      }
-    }
-    return keyName;
-  }
-
-  /**
-   * Matcher is of the form a.b.c... They can be matched as a -> b-> c or a.b -> c or a -> b.c etc. The matcher returns
-   * all possibilities in priority order
-   *
-   * @return
-   */
-  @JsonIgnore
-  public List<List<String>> getMatchers() {
-    if (matchers == null) {
-      List<List<String>> tmpMatchers = new ArrayList<List<String>>();
-      int matcherStartIndex = metric.indexOf(SEPARATOR);
-      if (matcherStartIndex > 0) {
-        String allTagsStr = metric.substring(matcherStartIndex + 1);
-        String[] tags = allTagsStr.split("\\.");
-        if (tags.length > 0) {
-          extractMatchers(tags, -1, tmpMatchers, null);
-        }
-      }
-
-      matchers = tmpMatchers;
-    }
-    return matchers;
-  }
-
-  public void extractMatchers(String[] tags, int index, List<List<String>> matchers, ArrayList<String> currentSet) {
-    if (tags.length == index + 1) {
-      matchers.add(currentSet);
-    } else {
-      if (index == -1) {
-        currentSet = new ArrayList<String>();
-        currentSet.add(tags[0]);
-        extractMatchers(tags, 0, matchers, currentSet);
-      } else {
-        ArrayList<String> mergeAndProceed = new ArrayList<String>(currentSet);
-        mergeAndProceed.add(tags[index + 1]);
-        extractMatchers(tags, index + 1, matchers, mergeAndProceed);
-
-        ArrayList<String> appendAndProceed = new ArrayList<String>(currentSet);
-        int lastIndex = appendAndProceed.size() - 1;
-        appendAndProceed.set(lastIndex, appendAndProceed.get(lastIndex) + "." + tags[index + 1]);
-        extractMatchers(tags, index + 1, matchers, appendAndProceed);
-      }
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppJmxHelper.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppJmxHelper.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppJmxHelper.java
deleted file mode 100644
index 7f7aae0..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppJmxHelper.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider.rest.client;
-
-import org.apache.commons.io.IOUtils;
-import org.codehaus.jackson.map.DeserializationConfig;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.map.ObjectReader;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
-import org.json.simple.parser.ParseException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
-import org.xml.sax.SAXException;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.xpath.XPathExpression;
-import javax.xml.xpath.XPathExpressionException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class SliderAppJmxHelper {
-
-  private static final Logger logger = LoggerFactory
-      .getLogger(SliderAppJmxHelper.class);
-  private static final String NAME_KEY = "name";
-  private static final String PORT_KEY = "tag.port";
-  private static final String FORPORT_KEY = "ForPort";
-  private static final String JSON_METRIC_START = "$['";
-  private static final String JSON_METRIC_END = "']";
-
-  public static JMXTypes jmxTypeExpected(Map<String, Metric> metrics) {
-    JMXTypes retVal = null;
-    for (Metric metric : metrics.values()) {
-      if (retVal == null) {
-        retVal = getMetricType(metric.getMetric());
-        continue;
-      } else {
-        if (retVal != getMetricType(metric.getMetric())) {
-          retVal = null;
-          break;
-        }
-      }
-    }
-    return retVal;
-  }
-
-  public static void extractMetricsFromJmxBean(InputStream jmxStream, String jmxUrl,
-                                               Map<String, String> jmxProperties,
-                                               Map<String, Metric> metrics) {
-    ObjectMapper jmxObjectMapper = new ObjectMapper();
-    jmxObjectMapper.configure(DeserializationConfig.Feature.USE_ANNOTATIONS, false);
-    ObjectReader jmxObjectReader = jmxObjectMapper.reader(JMXMetricHolder.class);
-    JMXMetricHolder metricHolder = null;
-    try {
-      metricHolder = jmxObjectReader.readValue(jmxStream);
-    } catch (IOException e) {
-      logger.error(String.format("Malformed jmx data from %s. Error %s", jmxUrl, e.getMessage()));
-    }
-
-    Map<String, Map<String, Object>> categories = new HashMap<String, Map<String, Object>>();
-
-    for (Map<String, Object> bean : metricHolder.getBeans()) {
-      String category = getCategory(bean);
-      if (category != null) {
-        categories.put(category, bean);
-      }
-    }
-
-    addJmxPropertiesFromBeans(jmxProperties, categories, metrics);
-  }
-
-  public static void extractMetricsFromJmxJson(InputStream jmxStream, String jmxUrl,
-                                               Map<String, String> jmxProperties,
-                                               Map<String, Metric> metrics)
-      throws IOException, ParseException {
-    JSONParser parser = new JSONParser();
-    Object obj = parser.parse(IOUtils.toString(jmxStream));
-    JSONObject jsonObject = (JSONObject) obj;
-    for (String key : metrics.keySet()) {
-      Metric metric = metrics.get(key);
-      String jsonKey = extractJsonKeySingleLevel(metric.getMetric());
-      Object value = jsonObject.get(jsonKey);
-      if (value != null) {
-        jmxProperties.put(key, value.toString());
-      }
-    }
-  }
-
-  private static String extractJsonKeySingleLevel(String metricKey) {
-    String jsonKey = metricKey;
-    if (metricKey != null) {
-      if (metricKey.startsWith(JSON_METRIC_START) && metricKey.endsWith(JSON_METRIC_END)) {
-        jsonKey = metricKey.substring(JSON_METRIC_START.length(), metricKey.length() - JSON_METRIC_END.length());
-      }
-    }
-
-    return jsonKey;
-  }
-
-  public static void extractMetricsFromJmxXML(InputStream jmxStream, String jmxUrl,
-                                              Map<String, String> jmxProperties,
-                                              Map<String, Metric> metrics)
-      throws ParserConfigurationException, IOException, SAXException, XPathExpressionException {
-    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-    DocumentBuilder builder = factory.newDocumentBuilder();
-    Document doc = builder.parse(jmxStream);
-    for (String key : metrics.keySet()) {
-      Metric metric = metrics.get(key);
-      XPathExpression xPathExpression = metric.getxPathExpression();
-      if (xPathExpression != null) {
-        String value = xPathExpression.evaluate(doc);
-        if (value != null) {
-          jmxProperties.put(key, value.toString().trim());
-        }
-      }
-    }
-  }
-
-  private static String getCategory(Map<String, Object> bean) {
-    if (bean.containsKey(NAME_KEY)) {
-      String name = (String) bean.get(NAME_KEY);
-
-      if (bean.containsKey(PORT_KEY)) {
-        String port = (String) bean.get(PORT_KEY);
-        name = name.replace(FORPORT_KEY + port, "");
-      }
-      return name;
-    }
-    return null;
-  }
-
-  protected static void addJmxPropertiesFromBeans(Map<String, String> jmxProperties,
-                                                  Map<String, Map<String, Object>> categories,
-                                                  Map<String, Metric> relevantMetrics) {
-    for (String metricName : relevantMetrics.keySet()) {
-      Metric metric = relevantMetrics.get(metricName);
-      String beanName = metric.getJmxBeanKeyName();
-      Object value = categories.get(beanName);
-      if (value instanceof Map) {
-        Map<?, ?> map = (Map<?, ?>) value;
-        for (List<String> matcher : metric.getMatchers()) {
-          boolean foundMetrics = false;
-          for (int matchIndex = 0; matchIndex < matcher.size(); matchIndex++) {
-            String matchKey = matcher.get(matchIndex);
-            value = map.get(matchKey);
-            if (value instanceof Map) {
-              map = (Map<?, ?>) value;
-              continue;
-            } else {
-              if (value != null && matchIndex == matcher.size() - 1) {
-                jmxProperties.put(metricName, value.toString());
-                foundMetrics = true;
-              } else {
-                break;
-              }
-            }
-          }
-          if (foundMetrics) {
-            break;
-          }
-        }
-      }
-    }
-  }
-
-  private static JMXTypes getMetricType(String metricKey) {
-    assert metricKey != null;
-    if (metricKey.startsWith("/")) {
-      return JMXTypes.XML;
-    } else if (metricKey.startsWith("$")) {
-      return JMXTypes.JSON;
-    } else {
-      return JMXTypes.JMX_BEAN;
-    }
-  }
-
-  public enum JMXTypes {
-    JMX_BEAN,
-    JSON,
-    XML
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMasterClient.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMasterClient.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMasterClient.java
deleted file mode 100644
index 0a2540c..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMasterClient.java
+++ /dev/null
@@ -1,324 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider.rest.client;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import org.apache.ambari.view.URLStreamProvider;
-import org.apache.ambari.view.ViewContext;
-import org.apache.ambari.view.slider.MetricsHolder;
-import org.apache.ambari.view.slider.SliderAppType;
-import org.apache.ambari.view.slider.SliderAppTypeComponent;
-import org.apache.ambari.view.slider.TemporalInfo;
-import org.apache.ambari.view.slider.SliderAppsViewController;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class SliderAppMasterClient extends BaseHttpClient {
-
-  private static final Logger logger = LoggerFactory
-      .getLogger(SliderAppMasterClient.class);
-
-  public SliderAppMasterClient(String url, ViewContext viewContext) {
-    super(url, viewContext);
-  }
-
-  public SliderAppMasterData getAppMasterData() {
-    try {
-      String html = doGet("");
-      if (html != null) {
-        int from = html.lastIndexOf("<ul>");
-        int to = html.lastIndexOf("</ul>");
-        if (from < to && from > -1) {
-          SliderAppMasterData data = new SliderAppMasterData();
-          String content = html.substring(from, to);
-          content = content.replaceAll("<[^>]*>", "\r\n");
-          String[] splits = content.split("\r\n");
-          for (int i = 0; i < splits.length; i++) {
-            String split = splits[i].trim();
-            if ("classpath:org.apache.slider.registry".equals(split)) {
-              data.registryUrl = splits[i + 1].trim();
-            } else if ("classpath:org.apache.http.UI".equals(split)) {
-              data.uiUrl = splits[i + 1].trim();
-            } else if ("classpath:org.apache.slider.management".equals(split)) {
-              data.managementUrl = splits[i + 1].trim();
-            } else if ("classpath:org.apache.slider.publisher".equals(split)) {
-              data.publisherUrl = splits[i + 1].trim();
-            }
-          }
-          return data;
-        }
-      }
-    } catch (IOException e) {
-      logger.warn("Unable to determine Ambari clusters", e);
-      throw new RuntimeException(e.getMessage(), e);
-    }
-    return null;
-  }
-
-  public Map<String, String> getQuickLinks(String providerUrl) {
-    Map<String, String> quickLinks = new HashMap<String, String>();
-    try {
-      if (providerUrl == null || providerUrl.trim().length() < 1) {
-        return quickLinks;
-      }
-      JsonElement json = super.doGetJson(providerUrl, "/slider/quicklinks");
-      if (json != null && json.getAsJsonObject() != null
-          && json.getAsJsonObject().has("entries")) {
-        JsonObject jsonObject = json.getAsJsonObject().get("entries")
-            .getAsJsonObject();
-        for (Entry<String, JsonElement> entry : jsonObject.entrySet()) {
-          if ("org.apache.slider.jmx".equals(entry.getKey())) {
-            quickLinks.put("JMX", entry.getValue().getAsString());
-          } else if ("org.apache.slider.monitor".equals(entry.getKey())) {
-            quickLinks.put("UI", entry.getValue().getAsString());
-          } else if ("org.apache.slider.metrics.ui".equals(entry.getKey())) {
-            quickLinks.put("Metrics UI", entry.getValue().getAsString());
-          } else if ("org.apache.slider.metrics".equals(entry.getKey())) {
-            quickLinks.put(SliderAppsViewController.METRICS_API_NAME, entry.getValue().getAsString());
-          } else {
-            quickLinks.put(entry.getKey(), entry.getValue().getAsString());
-          }
-        }
-      }
-    } catch (IOException e) {
-      logger.warn("Unable to determine quicklinks from " + providerUrl, e);
-    }
-    return quickLinks;
-  }
-
-  public Map<String, Map<String, String>> getConfigs(String providerUrl) {
-    Map<String, Map<String, String>> configsMap = new HashMap<String, Map<String, String>>();
-    try {
-      if (providerUrl == null || providerUrl.trim().length() < 1) {
-        return configsMap;
-      }
-      JsonElement json = super.doGetJson(providerUrl, "/slider");
-      if (json != null) {
-        JsonObject configsJson = json.getAsJsonObject().get("configurations")
-            .getAsJsonObject();
-        for (Entry<String, JsonElement> entry : configsJson.entrySet()) {
-          if ("complete-config".equals(entry.getKey())
-              || "quicklinks".equals(entry.getKey())) {
-            continue;
-          }
-          JsonElement entryJson = super.doGetJson(providerUrl, "/slider/"
-              + entry.getKey());
-          if (entryJson != null) {
-            JsonObject configsObj = entryJson.getAsJsonObject().get("entries")
-                .getAsJsonObject();
-            if (configsObj != null) {
-              Map<String, String> configs = new HashMap<String, String>();
-              for (Entry<String, JsonElement> e : configsObj.entrySet()) {
-                configs.put(e.getKey(), e.getValue().getAsString());
-              }
-              configsMap.put(entry.getKey(), configs);
-            }
-          }
-        }
-      }
-    } catch (IOException e) {
-      logger.warn("Unable to determine quicklinks from " + providerUrl, e);
-    }
-    return configsMap;
-  }
-
-  public Map<String, Number[][]> getMetrics(String appName,
-                                            String metricsUrl,
-                                            Set<String> metricsRequested,
-                                            TemporalInfo temporalInfo,
-                                            ViewContext context,
-                                            SliderAppType appType,
-                                            MetricsHolder metricsHolder) {
-    Map<String, Number[][]> retVal = new HashMap<String, Number[][]>();
-
-    if (appType == null || metricsHolder == null
-        || metricsHolder.getTimelineMetrics() == null) {
-      logger.info("AppType must be provided and it must contain "
-          + "timeline_metrics.json to extract jmx properties");
-      return retVal;
-    }
-
-    Map<String, Number[][]> receivedMetrics = null;
-    List<String> components = new ArrayList<String>();
-    for (SliderAppTypeComponent appTypeComponent : appType.getTypeComponents()) {
-      components.add(appTypeComponent.getName());
-    }
-
-    Map<String, Map<String, Map<String, Metric>>> metrics = metricsHolder
-        .getTimelineMetrics();
-    Map<String, Metric> relevantMetrics = getRelevantMetrics(metrics, components);
-    Set<String> metricsToRead = new HashSet<String>();
-    Map<String, String> reverseNameLookup = new HashMap<String, String>();
-    for (String key : relevantMetrics.keySet()) {
-      if (metricsRequested.contains(key)) {
-        String metricName = relevantMetrics.get(key).getMetric();
-        metricsToRead.add(metricName);
-        reverseNameLookup.put(metricName, key);
-      }
-    }
-
-    if (metricsToRead.size() != 0) {
-      try {
-        String specWithParams = SliderAppMetricsHelper.getUrlWithParams(
-            appName, metricsUrl, metricsToRead, temporalInfo);
-        logger.info("Using spec: " + specWithParams);
-        if (specWithParams != null) {
-
-          String spec = null;
-          String params = null;
-          String[] tokens = specWithParams.split("\\?", 2);
-
-          try {
-            spec = tokens[0];
-            params = tokens[1];
-          } catch (ArrayIndexOutOfBoundsException e) {
-            logger.info(e.toString());
-          }
-
-          receivedMetrics = SliderAppMetricsHelper.getMetrics(context, spec,
-              params);
-        }
-      } catch (Exception e) {
-        logger.warn("Unable to retrieve metrics. " + e.getMessage());
-      }
-    }
-
-    if (receivedMetrics != null) {
-      for (Map.Entry<String, Number[][]> metric : receivedMetrics.entrySet()) {
-        if (reverseNameLookup.containsKey(metric.getKey())) {
-          retVal.put(reverseNameLookup.get(metric.getKey()), metric.getValue());
-        }
-      }
-    }
-
-    return retVal;
-  }
-
-  /**
-   * Provides only the interesting JMX metric names and values.
-   *
-   * @param jmxUrl
-   *
-   * @return
-   */
-  public Map<String, String> getJmx(String jmxUrl,
-                                    ViewContext context,
-                                    SliderAppType appType,
-                                    MetricsHolder metricsHolder) {
-    Map<String, String> jmxProperties = new HashMap<String, String>();
-    if (appType == null || metricsHolder == null || metricsHolder.getJmxMetrics() == null) {
-      logger
-          .info("AppType must be provided and it must contain jmx_metrics.json to extract jmx properties");
-      return jmxProperties;
-    }
-
-    List<String> components = new ArrayList<String>();
-    for (SliderAppTypeComponent appTypeComponent : appType.getTypeComponents()) {
-      components.add(appTypeComponent.getName());
-    }
-
-    Map<String, Map<String, Map<String, Metric>>> metrics = metricsHolder.getJmxMetrics();
-    Map<String, Metric> relevantMetrics = getRelevantMetrics(metrics, components);
-    if (relevantMetrics.size() == 0) {
-      logger.info("No metrics found for components defined in the app.");
-      return jmxProperties;
-    }
-
-    SliderAppJmxHelper.JMXTypes jmxType = SliderAppJmxHelper.jmxTypeExpected(relevantMetrics);
-    if (jmxType == null) {
-      logger
-          .info("jmx_metrics.json is malformed. It may have mixed metric key types of unsupported metric key types.");
-      return jmxProperties;
-    }
-
-    try {
-      URLStreamProvider streamProvider = context.getURLStreamProvider();
-      InputStream jmxStream = null;
-      Map<String, String> headers = new HashMap<String, String>();
-      try {
-        jmxStream = streamProvider.readFrom(jmxUrl, "GET", (String)null, headers);
-      } catch (IOException e) {
-        logger.error(String.format(
-            "Unable to access JMX endpoint at %s. Error %s", jmxUrl,
-            e.getMessage()));
-      }
-
-      if (jmxStream != null) {
-        switch (jmxType) {
-          case JMX_BEAN:
-            SliderAppJmxHelper.extractMetricsFromJmxBean(jmxStream, jmxUrl,
-                                                         jmxProperties, relevantMetrics);
-            break;
-          case JSON:
-            SliderAppJmxHelper.extractMetricsFromJmxJson(jmxStream, jmxUrl,
-                                                         jmxProperties, relevantMetrics);
-            break;
-          case XML:
-            SliderAppJmxHelper.extractMetricsFromJmxXML(jmxStream, jmxUrl,
-                                                        jmxProperties, relevantMetrics);
-            break;
-          default:
-            logger.info("Unsupported jmx type.");
-        }
-      }
-    } catch (Exception e) {
-      logger.info("Failed to extract jmx metrics. " + e.getMessage());
-    }
-
-    return jmxProperties;
-  }
-
-  private Map<String, Metric> getRelevantMetrics(
-      Map<String, Map<String, Map<String, Metric>>> metrics, List<String> comps) {
-    Map<String, Metric> relevantMetrics = new HashMap<String, Metric>();
-    for (String comp : comps) {
-      for (Map<String, Map<String, Metric>> m : metrics.values()) {
-        if (m.containsKey(comp)) {
-          relevantMetrics.putAll(m.get(comp));
-        }
-      }
-    }
-    return relevantMetrics;
-  }
-
-  public static class SliderAppMasterData {
-    public String registryUrl;
-    public String uiUrl;
-    public String managementUrl;
-    public String publisherUrl;
-  }
-
-  public static class SliderAppContainerData {
-    public String hostName;
-    public String containerId;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMetricsHelper.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMetricsHelper.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMetricsHelper.java
deleted file mode 100644
index 1044e9d..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMetricsHelper.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider.rest.client;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.URISyntaxException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.ambari.view.SystemException;
-import org.apache.ambari.view.ViewContext;
-import org.apache.ambari.view.slider.TemporalInfo;
-import org.apache.http.client.utils.URIBuilder;
-import org.codehaus.jackson.map.AnnotationIntrospector;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.map.ObjectReader;
-import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
-import org.codehaus.jackson.xc.JaxbAnnotationIntrospector;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class SliderAppMetricsHelper {
-  private static final Logger logger = LoggerFactory
-      .getLogger(SliderAppMetricsHelper.class);
-  private static ObjectMapper mapper;
-  private final static ObjectReader timelineObjectReader;
-  private final static String URI_PARAM_APP_ID = "appId";
-  private final static String URI_PARAM_METRIC_NAMES = "metricNames";
-  private final static String URI_PARAM_START_TIME = "startTime";
-  private final static String URI_PARAM_END_TIME = "endTime";
-
-  static {
-    mapper = new ObjectMapper();
-    AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
-    mapper.setAnnotationIntrospector(introspector);
-    // no inspection deprecation
-    mapper.getSerializationConfig().setSerializationInclusion(
-        Inclusion.NON_NULL);
-    timelineObjectReader = mapper.reader(TimelineMetrics.class);
-  }
-
-  public static Map<String, Number[][]> getMetrics(ViewContext context,
-      String spec, String params) throws IOException {
-    Map<String, Number[][]> receivedMetrics = new HashMap<String, Number[][]>();
-    Map<String, String> headers = new HashMap<String, String>();
-
-    BufferedReader reader = null;
-    try {
-      String fullUrl = spec + "?" + params;
-      logger.debug("Metrics request url = " + fullUrl);
-      reader = new BufferedReader(new InputStreamReader(context
-          .getURLStreamProvider().readFrom(fullUrl, "GET", (String)null, headers)));
-
-      TimelineMetrics timelineMetrics = timelineObjectReader.readValue(reader);
-      logger.debug("Timeline metrics response => " + timelineMetrics);
-
-      for (TimelineMetric tlMetric : timelineMetrics.getMetrics()) {
-        if (tlMetric.getMetricName() != null
-            && tlMetric.getMetricValues() != null) {
-          Map<Long, Double> tlMetricValues = tlMetric.getMetricValues();
-          Number[][] metricValues = transformMetricValues(tlMetricValues);
-          receivedMetrics.put(tlMetric.getMetricName(), metricValues);
-        }
-      }
-
-    } catch (IOException io) {
-      logger.warn("Error getting timeline metrics.", io);
-    } finally {
-      if (reader != null) {
-        try {
-          reader.close();
-        } catch (IOException e) {
-          if (logger.isDebugEnabled()) {
-            logger.warn("Unable to close http input steam : spec=" + spec, e);
-          }
-        }
-      }
-    }
-
-    return receivedMetrics;
-  }
-
-  private static Number[][] transformMetricValues(
-      Map<Long, Double> tlMetricValues) {
-    Number[][] metricValues = new Number[tlMetricValues.size()][2];
-    int i = 0;
-    for (Map.Entry<Long, Double> tlMetricValue : tlMetricValues.entrySet()) {
-      // value goes to column 0
-      metricValues[i][0] = tlMetricValue.getValue();
-      // timestamp goes to column 1 - convert it from millis to sec
-      metricValues[i][1] = tlMetricValue.getKey() / 1000;
-      i++;
-    }
-    return metricValues;
-  }
-
-  public static String getUrlWithParams(String appName, String metricUrl,
-      Set<String> metricSet, TemporalInfo temporalInfo) throws SystemException,
-      URISyntaxException {
-    String metrics = getSetString(metricSet, -1);
-    URIBuilder uriBuilder = new URIBuilder(metricUrl);
-
-    if (appName != null) {
-      uriBuilder.setParameter(URI_PARAM_APP_ID, appName);
-    }
-    if (metrics.length() > 0) {
-      uriBuilder.setParameter(URI_PARAM_METRIC_NAMES, metrics);
-    }
-
-    if (temporalInfo != null) {
-      long startTime = temporalInfo.getStartTime();
-      if (startTime != -1) {
-        uriBuilder.setParameter(URI_PARAM_START_TIME, String.valueOf(startTime));
-      }
-      long endTime = temporalInfo.getEndTime();
-      if (endTime != -1) {
-        uriBuilder.setParameter(URI_PARAM_END_TIME, String.valueOf(endTime));
-      }
-    } else {
-      long endTime = System.currentTimeMillis() / 1000;
-      long startTime = System.currentTimeMillis() / 1000 - 60 * 60;
-      uriBuilder.setParameter(URI_PARAM_END_TIME, String.valueOf(endTime));
-      uriBuilder.setParameter(URI_PARAM_START_TIME, String.valueOf(startTime));
-    }
-    return uriBuilder.toString();
-  }
-
-  private static String getSetString(Set<String> set, int limit) {
-    StringBuilder sb = new StringBuilder();
-    if (limit == -1 || set.size() <= limit) {
-      for (String cluster : set) {
-        if (sb.length() > 0) {
-          sb.append(",");
-        }
-        sb.append(cluster);
-      }
-    }
-    return sb.toString();
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/TimelineMetric.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/TimelineMetric.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/TimelineMetric.java
deleted file mode 100644
index e5e1e8f..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/TimelineMetric.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.ambari.view.slider.rest.client;
-
-import org.apache.hadoop.classification.InterfaceAudience;
-import org.apache.hadoop.classification.InterfaceStability;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import java.util.Map;
-import java.util.TreeMap;
-
-@XmlRootElement(name = "metric")
-@XmlAccessorType(XmlAccessType.NONE)
-@InterfaceAudience.Public
-@InterfaceStability.Unstable
-public class TimelineMetric implements Comparable<TimelineMetric> {
-
-  private String metricName;
-  private String appId;
-  private String instanceId;
-  private String hostName;
-  private long timestamp;
-  private long startTime;
-  private String type;
-  private Map<Long, Double> metricValues = new TreeMap<Long, Double>();
-
-  @XmlElement(name = "metricname")
-  public String getMetricName() {
-    return metricName;
-  }
-
-  public void setMetricName(String metricName) {
-    this.metricName = metricName;
-  }
-
-  @XmlElement(name = "appid")
-  public String getAppId() {
-    return appId;
-  }
-
-  public void setAppId(String appId) {
-    this.appId = appId;
-  }
-
-  @XmlElement(name = "instanceid")
-  public String getInstanceId() {
-    return instanceId;
-  }
-
-  public void setInstanceId(String instanceId) {
-    this.instanceId = instanceId;
-  }
-
-  @XmlElement(name = "hostname")
-  public String getHostName() {
-    return hostName;
-  }
-
-  public void setHostName(String hostName) {
-    this.hostName = hostName;
-  }
-
-  @XmlElement(name = "timestamp")
-  public long getTimestamp() {
-    return timestamp;
-  }
-
-  public void setTimestamp(long timestamp) {
-    this.timestamp = timestamp;
-  }
-
-  @XmlElement(name = "starttime")
-  public long getStartTime() {
-    return startTime;
-  }
-
-  public void setStartTime(long startTime) {
-    this.startTime = startTime;
-  }
-
-  @XmlElement(name = "type")
-  public String getType() {
-    return type;
-  }
-
-  public void setType(String type) {
-    this.type = type;
-  }
-
-  @XmlElement(name = "metrics")
-  public Map<Long, Double> getMetricValues() {
-    return metricValues;
-  }
-
-  public void setMetricValues(Map<Long, Double> metricValues) {
-    this.metricValues = metricValues;
-  }
-
-  public void addMetricValues(Map<Long, Double> metricValues) {
-    this.metricValues.putAll(metricValues);
-  }
-
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) return true;
-    if (o == null || getClass() != o.getClass()) return false;
-
-    TimelineMetric metric = (TimelineMetric) o;
-
-    if (!metricName.equals(metric.metricName)) return false;
-    if (hostName != null ? !hostName.equals(metric.hostName) : metric.hostName != null)
-      return false;
-    if (appId != null ? !appId.equals(metric.appId) : metric.appId != null)
-      return false;
-    if (instanceId != null ? !instanceId.equals(metric.instanceId) : metric.instanceId != null)
-      return false;
-    if (timestamp != metric.timestamp) return false;
-    if (startTime != metric.startTime) return false;
-
-    return true;
-  }
-
-  public boolean equalsExceptTime(TimelineMetric metric) {
-    if (!metricName.equals(metric.metricName)) return false;
-    if (hostName != null ? !hostName.equals(metric.hostName) : metric.hostName != null)
-      return false;
-    if (appId != null ? !appId.equals(metric.appId) : metric.appId != null)
-      return false;
-    if (instanceId != null ? !instanceId.equals(metric.instanceId) : metric.instanceId != null)
-      return false;
-
-    return true;
-  }
-
-  @Override
-  public int hashCode() {
-    int result = metricName.hashCode();
-    result = 31 * result + (appId != null ? appId.hashCode() : 0);
-    result = 31 * result + (instanceId != null ? instanceId.hashCode() : 0);
-    result = 31 * result + (hostName != null ? hostName.hashCode() : 0);
-    result = 31 * result + (int) (timestamp ^ (timestamp >>> 32));
-    return result;
-  }
-
-  @Override
-  public int compareTo(TimelineMetric other) {
-    if (timestamp > other.timestamp) {
-      return -1;
-    } else if (timestamp < other.timestamp) {
-      return 1;
-    } else {
-      return metricName.compareTo(other.metricName);
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/TimelineMetrics.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/TimelineMetrics.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/TimelineMetrics.java
deleted file mode 100644
index bb125af..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/TimelineMetrics.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.ambari.view.slider.rest.client;
-
-import org.apache.hadoop.classification.InterfaceAudience;
-import org.apache.hadoop.classification.InterfaceStability;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * The class that hosts a list of timeline entities.
- */
-@XmlRootElement(name = "metrics")
-@XmlAccessorType(XmlAccessType.NONE)
-@InterfaceAudience.Public
-@InterfaceStability.Unstable
-public class TimelineMetrics {
-
-  private List<TimelineMetric> allMetrics = new ArrayList<TimelineMetric>();
-
-  public TimelineMetrics() {}
-
-  @XmlElement(name = "metrics")
-  public List<TimelineMetric> getMetrics() {
-    return allMetrics;
-  }
-
-  public void setMetrics(List<TimelineMetric> allMetrics) {
-    this.allMetrics = allMetrics;
-  }
-
-  private boolean isEqualTimelineMetrics(TimelineMetric metric1,
-                                         TimelineMetric metric2) {
-
-    boolean isEqual = true;
-
-    if (!metric1.getMetricName().equals(metric2.getMetricName())) {
-      return false;
-    }
-
-    if (metric1.getHostName() != null) {
-      isEqual = metric1.getHostName().equals(metric2.getHostName());
-    }
-
-    if (metric1.getAppId() != null) {
-      isEqual = metric1.getAppId().equals(metric2.getAppId());
-    }
-
-    return isEqual;
-  }
-
-  /**
-   * Merge with existing TimelineMetric if everything except startTime is
-   * the same.
-   * @param metric {@link TimelineMetric}
-   */
-  public void addOrMergeTimelineMetric(TimelineMetric metric) {
-    TimelineMetric metricToMerge = null;
-
-    if (!allMetrics.isEmpty()) {
-      for (TimelineMetric timelineMetric : allMetrics) {
-        if (timelineMetric.equalsExceptTime(metric)) {
-          metricToMerge = timelineMetric;
-          break;
-        }
-      }
-    }
-
-    if (metricToMerge != null) {
-      metricToMerge.addMetricValues(metric.getMetricValues());
-      if (metricToMerge.getTimestamp() > metric.getTimestamp()) {
-        metricToMerge.setTimestamp(metric.getTimestamp());
-      }
-      if (metricToMerge.getStartTime() > metric.getStartTime()) {
-        metricToMerge.setStartTime(metric.getStartTime());
-      }
-    } else {
-      allMetrics.add(metric);
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/URLStreamProviderBasicAuth.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/URLStreamProviderBasicAuth.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/URLStreamProviderBasicAuth.java
deleted file mode 100644
index 2d32fd7..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/URLStreamProviderBasicAuth.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.ambari.view.slider.rest.client;
-
-import org.apache.ambari.view.URLStreamProvider;
-import org.apache.commons.codec.binary.Base64;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Wrapper for URLStreamProvider that adds authentication header.
- */
-public class URLStreamProviderBasicAuth implements URLStreamProvider {
-  private URLStreamProvider urlStreamProvider;
-  private String username;
-  private String password;
-  private String requestedBy = "views";
-
-  public URLStreamProviderBasicAuth(URLStreamProvider urlStreamProvider, String username, String password) {
-    this.urlStreamProvider = urlStreamProvider;
-    this.username = username;
-    this.password = password;
-  }
-
-  /**
-   * X-Requested-By header value
-   * @param requestedBy value of X-Requested-By header
-   */
-  public void setRequestedBy(String requestedBy) {
-    this.requestedBy = requestedBy;
-  }
-
-  @Override
-  public InputStream readFrom(String url, String method, String data, Map<String, String> headers) throws IOException {
-    return urlStreamProvider.readFrom(url, method, data, addHeaders(headers));
-  }
-
-  @Override
-  public InputStream readFrom(String url, String method, InputStream data, Map<String, String> headers) throws IOException {
-    return urlStreamProvider.readFrom(url, method, data, addHeaders(headers));
-  }
-
-  @Override
-  public InputStream readAs(String url, String method, String data, Map<String, String> headers, String doAs) throws IOException {
-    return urlStreamProvider.readAs(url, method, data, addHeaders(headers), doAs);
-  }
-
-  @Override
-  public InputStream readAs(String url, String method, InputStream data, Map<String, String> headers, String doAs) throws IOException {
-    return urlStreamProvider.readAs(url, method, data, addHeaders(headers), doAs);
-  }
-
-  @Override
-  public InputStream readAsCurrent(String url, String method, String data, Map<String, String> headers) throws IOException {
-    return urlStreamProvider.readAsCurrent(url, method, data, addHeaders(headers));
-  }
-
-  @Override
-  public InputStream readAsCurrent(String url, String method, InputStream data, Map<String, String> headers) throws IOException {
-    return urlStreamProvider.readAsCurrent(url, method, data, addHeaders(headers));
-  }
-
-  private HashMap<String, String> addHeaders(Map<String, String> customHeaders) {
-    HashMap<String, String> newHeaders = new HashMap<String, String>();
-    if (customHeaders != null)
-      newHeaders.putAll(customHeaders);
-
-    if (urlStreamProvider != null) {
-      // basic auth is not needed for AmbariStreamProvider
-      addBasicAuthHeaders(newHeaders);
-    }
-    addRequestedByHeaders(newHeaders);
-    return newHeaders;
-  }
-
-  private void addRequestedByHeaders(HashMap<String, String> newHeaders) {
-    newHeaders.put("X-Requested-By", requestedBy);
-  }
-
-  private void addBasicAuthHeaders(HashMap<String, String> headers) {
-    String authString = username + ":" + password;
-    byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
-    String authStringEnc = new String(authEncBytes);
-
-    headers.put("Authorization", "Basic " + authStringEnc);
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/slider.properties
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/slider.properties b/contrib/views/slider/src/main/resources/slider.properties
deleted file mode 100644
index c635e15..0000000
--- a/contrib/views/slider/src/main/resources/slider.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright 2011 The Apache Software Foundation
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-slider.view.version=${project.version}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/.gitignore
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/.gitignore b/contrib/views/slider/src/main/resources/ui/.gitignore
deleted file mode 100755
index 95fc1d7..0000000
--- a/contrib/views/slider/src/main/resources/ui/.gitignore
+++ /dev/null
@@ -1,31 +0,0 @@
-# Numerous always-ignore extensions
-*.diff
-*.err
-*.orig
-*.log
-*.rej
-*.swo
-*.swp
-*.vi
-*~
-*.sass-cache
-
-# OS or Editor folders
-.DS_Store
-.cache
-.project
-.settings
-.tmproj
-nbproject
-Thumbs.db
-
-# NPM packages folder.
-node_modules/
-
-# Brunch folder for temporary files.
-tmp/
-
-# Brunch output folder.
-public/
-
-bower_components/

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/LICENSE
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/LICENSE b/contrib/views/slider/src/main/resources/ui/LICENSE
deleted file mode 100755
index 345b31a..0000000
--- a/contrib/views/slider/src/main/resources/ui/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-All of brunch-with-ember-reloaded is licensed under the MIT license.
-
-Copyright (c) 2013 Giovanni Collazo
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.


[24/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/createAppWizard/step2_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/createAppWizard/step2_view.js b/contrib/views/slider/src/main/resources/ui/app/views/createAppWizard/step2_view.js
deleted file mode 100644
index bdf718f..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/createAppWizard/step2_view.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.CreateAppWizardStep2View = Ember.View.extend({
-
-  /**
-   * Message shown in the checkbox popover
-   * @type {string}
-   */
-  checkBoxPopover: Em.I18n.t('wizard.step2.table.popoverCheckbox'),
-
-  /**
-   * Message shown in the label-input popover
-   * @type {string}
-   */
-  yarnLabelPopover: Em.I18n.t('wizard.step2.table.popoverLabel')
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/createAppWizard/step3_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/createAppWizard/step3_view.js b/contrib/views/slider/src/main/resources/ui/app/views/createAppWizard/step3_view.js
deleted file mode 100644
index 5d3bd57..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/createAppWizard/step3_view.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.CreateAppWizardStep3View = Ember.View.extend(App.WithPanels, {
-
-  didInsertElement: function () {
-    this.get('controller').loadStep();
-    this.addCarets();
-  }
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/createAppWizard/step4_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/createAppWizard/step4_view.js b/contrib/views/slider/src/main/resources/ui/app/views/createAppWizard/step4_view.js
deleted file mode 100644
index 9034001..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/createAppWizard/step4_view.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.CreateAppWizardStep4View = Ember.View.extend({
-
-  didInsertElement: function () {
-    this.get('controller').loadStep();
-  }
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/create_app_wizard_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/create_app_wizard_view.js b/contrib/views/slider/src/main/resources/ui/app/views/create_app_wizard_view.js
deleted file mode 100644
index a511095..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/create_app_wizard_view.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.CreateAppWizardView = Ember.View.extend({
-
-  classNames: ['create-app-wizard-wrapper'],
-
-  didInsertElement: function(){
-    this.setHeight();
-    $(window).resize(this.setHeight);
-    this.get('controller').loadStep();
-  },
-
-  isStep1: function () {
-    return this.get('controller.currentStep') == 1;
-  }.property('controller.currentStep'),
-
-  isStep2: function () {
-    return this.get('controller.currentStep') == 2;
-  }.property('controller.currentStep'),
-
-  isStep3: function () {
-    return this.get('controller.currentStep') == 3;
-  }.property('controller.currentStep'),
-
-  isStep4: function () {
-    return this.get('controller.currentStep') == 4;
-  }.property('controller.currentStep'),
-
-  isStep1Disabled: function () {
-    return this.get('controller.currentStep') < 1;
-  }.property('controller.currentStep'),
-
-  isStep2Disabled: function () {
-    return this.get('controller.currentStep') < 2;
-  }.property('controller.currentStep'),
-
-  isStep3Disabled: function () {
-    return this.get('controller.currentStep') < 3;
-  }.property('controller.currentStep'),
-
-  isStep4Disabled: function () {
-    return this.get('controller.currentStep') < 4;
-  }.property('controller.currentStep'),
-
-  actions: {
-    hide: function () {
-      this.hidePopup();
-    },
-    finish: function () {
-      this.hidePopup();
-    }
-  },
-
-  hidePopup: function () {
-    $(this.get('element')).find('.modal').hide();
-    this.get('controller').transitionToRoute('slider_apps');
-  },
-
-  setHeight: function () {
-    var height = $(window).height() * 0.8;
-    $('.slider-modal-body').css('max-height', height + 'px');
-    $('#createAppWizard').css('margin-top', -(height / 2) + 'px');
-  }
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/slider_app/configs_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/slider_app/configs_view.js b/contrib/views/slider/src/main/resources/ui/app/views/slider_app/configs_view.js
deleted file mode 100644
index 5093fb9..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/slider_app/configs_view.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.SliderAppConfigsView = Ember.View.extend(App.WithPanels, {
-
-  /**
-   * List of configs group by categories
-   * @type {Object[]}
-   */
-  configsByCategories: Em.A([]),
-
-  /**
-   * Observer for model's configs
-   * Updates <code>configsByCategories</code>
-   * @method configsObserver
-   */
-  configsObserver: function() {
-    var model = this.get('controller.content'),
-      configs = model.get('.configs'),
-      configsByCategories = this.get('configsByCategories'),
-      hiddenCategories = model.get('hiddenCategories');
-    Em.keys(configs).forEach(function (site) {
-      if (configsByCategories.mapBy('name').contains(site)) {
-        var c = configsByCategories.findBy('name', site);
-        c.set('configs', model.mapObject(configs[site]));
-        c.set('isVisible', !hiddenCategories.contains(site));
-      }
-      else {
-        configsByCategories.pushObject(Em.Object.create({
-          name: site,
-          configs: model.mapObject(configs[site]),
-          isVisible: !hiddenCategories.contains(site)
-        }));
-      }
-    });
-  }.observes('controller.content.configs.@each'),
-
-  didInsertElement: function() {
-    this.addCarets();
-  }
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/slider_app/destroy_modal_footer_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/slider_app/destroy_modal_footer_view.js b/contrib/views/slider/src/main/resources/ui/app/views/slider_app/destroy_modal_footer_view.js
deleted file mode 100644
index 0bab4ae..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/slider_app/destroy_modal_footer_view.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.DestroyAppPopupFooterView = Ember.View.extend({
-
-  /**
-   * targetObject should be defined for buttons and other components that may set actions
-   * @type {Em.Controller}
-   */
-  targetObjectBinding: 'controller',
-
-  templateName: 'slider_app/destroy/destroy_popup_footer',
-
-  /**
-   * Destroy-button
-   * @type {Em.Object}
-   */
-  destroyButton: Em.Object.create({title: Em.I18n.t('common.destroy'), clicked: "modalConfirmed", type:'success'}),
-
-  /**
-   * Cancel-button
-   * @type {Em.Object}
-   */
-  cancelButton: Em.Object.create({title: Em.I18n.t('common.cancel'), clicked: "modalCanceled"})
-
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/slider_app/destroy_popup_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/slider_app/destroy_popup_view.js b/contrib/views/slider/src/main/resources/ui/app/views/slider_app/destroy_popup_view.js
deleted file mode 100644
index f1ce6ba..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/slider_app/destroy_popup_view.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.DestroyAppPopupView = Ember.View.extend({
-
-  templateName: 'slider_app/destroy/destroy_popup',
-
-  /**
-   * targetObject should be defined for buttons and other components that may set actions
-   * @type {Em.Controller}
-   */
-  targetObjectBinding: 'controller',
-
-  /**
-   * Warning message for dummy user
-   * @type {string}
-   */
-  confirmMessage: function() {
-    return Em.I18n.t('sliderApp.destroy.confirm.body2').format(this.get('controller.model.name'));
-  }.property()
-
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/slider_app/metrics/app_metric_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/slider_app/metrics/app_metric_view.js b/contrib/views/slider/src/main/resources/ui/app/views/slider_app/metrics/app_metric_view.js
deleted file mode 100644
index b208baa..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/slider_app/metrics/app_metric_view.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with this
- * work for additional information regarding copyright ownership. The ASF
- * licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-/**
- * @class
- *
- * This is a view for showing cluster CPU metrics
- *
- * @extends App.ChartView
- * @extends Ember.Object
- * @extends Ember.View
- */
-App.AppMetricView = App.ChartView.extend(App.RunPeriodically, {
-
-  app: null,
-
-  metricName: null,
-
-  id: function () {
-    return 'graph_' + this.get('app.id') + this.get('metricName');
-  }.property('app.id', 'metricName'),
-
-  title: function () {
-    return this.get('metricName').humanize();
-  }.property('metricName'),
-
-  yAxisFormatter: App.ChartView.DefaultFormatter,
-
-  renderer: 'line',
-
-  ajaxIndex: 'metrics',
-
-  getDataForAjaxRequest: function () {
-    return {
-      id: this.get('app.id'),
-      metric: this.get('metricName')
-    };
-  },
-
-  transformToSeries: function (jsonData) {
-    var self = this,
-      seriesArray = [],
-      metricName = this.get('metricName'),
-      metrics = Ember.get(jsonData, 'metrics');
-    if (!Ember.isNone(metrics)) {
-      Ember.keys(metrics).forEach(function () {
-        var seriesData = metrics[metricName];
-        if (seriesData) {
-          var s = self.transformData(seriesData, metricName);
-          seriesArray.push(s);
-        }
-      });
-    }
-    this.get('parentView.graphs').findBy('metricName', metricName).set('dataExists', !!seriesArray.length);
-    return seriesArray;
-  },
-
-  loadDataErrorCallback: function() {
-    this.set('isReady', true);
-    this.get('parentView.graphs').findBy('metricName', this.get('metricName')).set('dataExists', false);
-  }
-
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/slider_app/metrics/metric2_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/slider_app/metrics/metric2_view.js b/contrib/views/slider/src/main/resources/ui/app/views/slider_app/metrics/metric2_view.js
deleted file mode 100644
index f9a6487..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/slider_app/metrics/metric2_view.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with this
- * work for additional information regarding copyright ownership. The ASF
- * licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-/**
- * @class
- *
- * This is a view for showing cluster CPU metrics
- *
- * @extends App.ChartView
- * @extends Ember.Object
- * @extends Ember.View
- */
-App.Metric2View = App.ChartView.extend({
-  id: "service-metrics-hdfs-jvm-threads",
-  title: 'jvm Threads',
-  renderer: 'line',
-
-  ajaxIndex: 'metrics2',
-
-  transformToSeries: function (jsonData) {
-    var seriesArray = [];
-    if (jsonData && jsonData.metrics && jsonData.metrics.jvm) {
-      for ( var name in jsonData.metrics.jvm) {
-        var displayName;
-        var seriesData = jsonData.metrics.jvm[name];
-        switch (name) {
-          case "threadsBlocked":
-            displayName = 'Threads Blocked';
-            break;
-          case "threadsWaiting":
-            displayName = 'Threads Waiting';
-            break;
-          case "threadsTimedWaiting":
-            displayName = 'Threads Timed Waiting';
-            break;
-          case "threadsRunnable":
-            displayName = 'Threads Runnable';
-            break;
-          default:
-            break;
-        }
-        if (seriesData) {
-          seriesArray.push(this.transformData(seriesData, displayName));
-        }
-      }
-    }
-    return seriesArray;
-  }
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/slider_app/metrics/metric3_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/slider_app/metrics/metric3_view.js b/contrib/views/slider/src/main/resources/ui/app/views/slider_app/metrics/metric3_view.js
deleted file mode 100644
index b47d8dc..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/slider_app/metrics/metric3_view.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with this
- * work for additional information regarding copyright ownership. The ASF
- * licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-/**
- * @class
- *
- * This is a view for showing cluster CPU metrics
- *
- * @extends App.ChartView
- * @extends Ember.Object
- * @extends Ember.View
- */
-App.Metric3View = App.ChartView.extend({
-  id: "service-metrics-hdfs-file-operations",
-  title: 'File Operations',
-  renderer: 'line',
-
-  ajaxIndex: 'metrics3',
-  yAxisFormatter: App.ChartView.CreateRateFormatter('ops', App.ChartView.DefaultFormatter),
-
-  transformToSeries: function (jsonData) {
-    var seriesArray = [];
-    if (jsonData && jsonData.metrics && jsonData.metrics.dfs && jsonData.metrics.dfs.namenode) {
-      for ( var name in jsonData.metrics.dfs.namenode) {
-        var displayName;
-        var seriesData = jsonData.metrics.dfs.namenode[name];
-        switch (name) {
-          case "FileInfoOps":
-            displayName = 'File Info Ops';
-            break;
-          case "DeleteFileOps":
-            displayName = 'Delete File Ops';
-            break;
-          case "CreateFileOps":
-            displayName = 'Create File Ops';
-            break;
-          default:
-            break;
-        }
-        if (seriesData) {
-          seriesArray.push(this.transformData(seriesData, displayName));
-        }
-      }
-    }
-    return seriesArray;
-  }
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/slider_app/metrics/metric4_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/slider_app/metrics/metric4_view.js b/contrib/views/slider/src/main/resources/ui/app/views/slider_app/metrics/metric4_view.js
deleted file mode 100644
index 9897a30..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/slider_app/metrics/metric4_view.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with this
- * work for additional information regarding copyright ownership. The ASF
- * licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-/**
- * @class
- *
- * This is a view for showing cluster CPU metrics
- *
- * @extends App.ChartView
- * @extends Ember.Object
- * @extends Ember.View
- */
-App.Metric4View = App.ChartView.extend({
-  id: "service-metrics-hdfs-rpc",
-  title: 'RPC',
-  yAxisFormatter: App.ChartView.TimeElapsedFormatter,
-
-  ajaxIndex: 'metrics4',
-
-  transformToSeries: function (jsonData) {
-    var seriesArray = [];
-    if (jsonData && jsonData.metrics && jsonData.metrics.rpc) {
-      for ( var name in jsonData.metrics.rpc) {
-        var displayName;
-        var seriesData = jsonData.metrics.rpc[name];
-        switch (name) {
-          case "RpcQueueTime_avg_time":
-            displayName = 'RPC Queue Time Avg Time';
-            break;
-          default:
-            break;
-        }
-        if (seriesData) {
-          seriesArray.push(this.transformData(seriesData, displayName));
-        }
-      }
-    }
-    return seriesArray;
-  }
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/slider_app/metrics/metric_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/slider_app/metrics/metric_view.js b/contrib/views/slider/src/main/resources/ui/app/views/slider_app/metrics/metric_view.js
deleted file mode 100644
index 5f6c671..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/slider_app/metrics/metric_view.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with this
- * work for additional information regarding copyright ownership. The ASF
- * licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-/**
- * @class
- *
- * This is a view for showing cluster CPU metrics
- *
- * @extends App.ChartView
- * @extends Ember.Object
- * @extends Ember.View
- */
-App.MetricView = App.ChartView.extend({
-
-  id: "service-metrics-hdfs-space-utilization",
-
-  title: 'Space Utilization',
-
-  yAxisFormatter: App.ChartView.BytesFormatter,
-
-  renderer: 'line',
-
-  ajaxIndex: 'metrics',
-
-  transformToSeries: function (jsonData) {
-    var seriesArray = [];
-    var GB = Math.pow(2, 30);
-    if (jsonData && jsonData.metrics && jsonData.metrics.dfs && jsonData.metrics.dfs.FSNamesystem) {
-      for ( var name in jsonData.metrics.dfs.FSNamesystem) {
-        var displayName;
-        var seriesData = jsonData.metrics.dfs.FSNamesystem[name];
-        switch (name) {
-          case "CapacityRemainingGB":
-            displayName = 'Capacity Remaining GB';
-            break;
-          case "CapacityUsedGB":
-            displayName = 'Capacity Used GB';
-            break;
-          case "CapacityTotalGB":
-            displayName = 'Capacity Total GB';
-            break;
-          default:
-            break;
-        }
-        if (seriesData) {
-          var s = this.transformData(seriesData, displayName);
-          for (var i = 0; i < s.data.length; i++) {
-            s.data[i].y *= GB;
-          }
-          seriesArray.push(s);
-        }
-      }
-    }
-    return seriesArray;
-  }
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/slider_app/summary_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/slider_app/summary_view.js b/contrib/views/slider/src/main/resources/ui/app/views/slider_app/summary_view.js
deleted file mode 100644
index 2c88608..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/slider_app/summary_view.js
+++ /dev/null
@@ -1,141 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.SliderAppSummaryView = Ember.View.extend({
-
-  classNames: ['app_summary'],
-
-  /**
-   * List of graphs shown on page
-   * Format:
-   * <code>
-   *   [
-   *      {
-   *        id: string,
-   *        dataExists: bool,
-   *        metricName: string,
-   *        view: App.AppMetricView
-   *      },
-   *      {
-   *        id: string,
-   *        dataExists: bool,
-   *        metricName: string,
-   *        view: App.AppMetricView
-   *      },
-   *      ....
-   *   ]
-   * </code>
-   * @type {{object}[]}
-   */
-  graphs: [],
-
-  /**
-   * Determine if at least one graph contains some data to show
-   * @type {bool}
-   */
-  graphsNotEmpty: function () {
-    return this.get('graphs').isAny('dataExists', true);
-  }.property('graphs.@each.dataExists'),
-
-  /**
-   * Update <code>graphs</code>-list when <code>model</code> is updated
-   * New metrics are pushed to <code>graphs</code> (not set new list to <code>graphs</code>!) to prevent page flickering
-   * @method updateGraphs
-   */
-  updateGraphs: function () {
-    var model = this.get('controller.model'),
-      existingGraphs = this.get('graphs'),
-      graphsBeenChanged = false;
-
-    if (model) {
-      var currentGraphIds = [],
-        supportedMetrics = model.get('supportedMetricNames');
-      if (supportedMetrics) {
-        var appId = model.get('id');
-        supportedMetrics.split(',').forEach(function (metricName) {
-          var graphId = metricName + '_' + appId;
-          currentGraphIds.push(graphId);
-          if (!existingGraphs.isAny('id', graphId)) {
-            graphsBeenChanged = true;
-            var view = App.AppMetricView.extend({
-              app: model,
-              metricName: metricName
-            });
-            existingGraphs.push(Em.Object.create({
-              id: graphId,
-              view: view,
-              dataExists: false,
-              metricName: metricName
-            }));
-          }
-        });
-      }
-      // Delete not existed graphs
-      existingGraphs = existingGraphs.filter(function (existingGraph) {
-        graphsBeenChanged = graphsBeenChanged || !currentGraphIds.contains(existingGraph.get('id'));
-        return currentGraphIds.contains(existingGraph.get('id'));
-      });
-      if (graphsBeenChanged) {
-        this.set('graphs', existingGraphs);
-      }
-    }
-  }.observes('controller.model.supportedMetricNames'),
-
-  didInsertElement: function () {
-    var self = this;
-    Em.run.next(function () {
-      self.fitPanels();
-    });
-  },
-
-  /**
-   * Set equal height to left (summary) and right (alerts and components) columns basing on higher value
-   * @method fitPanels
-   */
-  fitPanels: function () {
-    var panelSummary = this.$('.panel-summary'),
-      panelSummaryBody = panelSummary.find('.panel-body'),
-      columnRight = this.$('.column-right'),
-      panelAlerts = columnRight.find('.panel-alerts'),
-      panelComponentsBody = columnRight.find('.panel-components .panel-body'),
-      wrapperHeightDiff = columnRight.find('.panel-components').height() - panelComponentsBody.height();
-    if (panelSummary.height() < panelSummaryBody.height()) {
-      panelSummary.height(panelSummaryBody.height());
-    }
-    var marginAndBorderHeight = parseInt(panelAlerts.css('margin-bottom')) + 3;
-    if (panelSummary.height() > columnRight.height()) {
-      panelComponentsBody.height(panelSummary.height() - panelAlerts.height() - marginAndBorderHeight - wrapperHeightDiff);
-    }
-    else {
-      panelSummary.height(columnRight.height() - marginAndBorderHeight);
-    }
-  },
-
-  AlertView: Em.View.extend({
-    content: null,
-    tagName: 'li',
-    tooltip: function () {
-      return Ember.Object.create({
-        trigger: 'hover',
-        content: this.get('content.timeSinceAlertDetails'),
-        placement: "bottom"
-      });
-    }.property('content')
-  })
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/slider_app_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/slider_app_view.js b/contrib/views/slider/src/main/resources/ui/app/views/slider_app_view.js
deleted file mode 100644
index a394493..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/slider_app_view.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.SliderAppView = Ember.View.extend({
-
-  didInsertElement: function() {
-    // Breadcrumbs should be on the one line with Slider Title
-    // but title and breadcrumbs are in different templates
-    $('.apps-breadcrumbs').css({
-      'margin-top': -28,
-      'margin-left': $('.slider-app-title').width() + 10
-    });
-  }
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/views/slider_apps_view.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/views/slider_apps_view.js b/contrib/views/slider/src/main/resources/ui/app/views/slider_apps_view.js
deleted file mode 100644
index 22f8067..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/views/slider_apps_view.js
+++ /dev/null
@@ -1,175 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-var filters = require('views/common/filter_view');
-var sort = require('views/common/sort_view');
-
-App.SliderAppsView = App.TableView.extend({
-
-  statusList: [
-    "All Status",
-    App.SliderApp.Status.accepted,
-    App.SliderApp.Status.failed,
-    App.SliderApp.Status.finished,
-    App.SliderApp.Status.killed,
-    App.SliderApp.Status.new,
-    App.SliderApp.Status.new_saving,
-    App.SliderApp.Status.running,
-    App.SliderApp.Status.submitted,
-    App.SliderApp.Status.stopped,
-  ],
-
-  content: function () {
-    return this.get('controller.model');
-  }.property('controller.model.length'),
-
-  didInsertElement: function () {
-    this.set('filteredContent',this.get('content'));
-  },
-
-  filteredContentInfo: function () {
-    return Em.I18n.t('sliderApps.filters.info').format(this.get('filteredContent.length'), this.get('content.length'));
-  }.property('content.length', 'filteredContent.length'),
-
-  sortView: sort.wrapperView,
-  nameSort: sort.fieldView.extend({
-    column: 0,
-    name:'name',
-    displayName: "Name"
-  }),
-
-  statusSort: sort.fieldView.extend({
-    column: 1,
-    name:'status',
-    displayName: "Status"
-  }),
-
-  typeSort: sort.fieldView.extend({
-    column: 2,
-    name:'appType',
-    displayName: "Type"
-  }),
-
-  userSort: sort.fieldView.extend({
-    column: 3,
-    name:'user',
-    displayName: "User"
-  }),
-
-  startSort: sort.fieldView.extend({
-    column: 4,
-    name:'started',
-    displayName: "Start Time",
-    type: "number"
-  }),
-
-  endSort: sort.fieldView.extend({
-    column: 5,
-    name:'ended',
-    displayName: "End Time",
-    type: "number"
-  }),
-
-  SliderView: Em.View.extend({
-    content: null,
-    tagName: 'tr',
-    popover: function(){
-      var template = this.createChildView(App.SliderTooltip, {
-        content: this.get('content')
-      });
-      return Ember.Object.create({
-        trigger: 'hover',
-        title: this.get('content.data.name'),
-        template: template.renderToBuffer().string(),
-        placement: "right"
-      });
-    }.property('content')
-  }),
-
-  /**
-   * Filter view for name column
-   * Based on <code>filters</code> library
-   */
-  nameFilterView: filters.createTextView({
-    column: 0,
-    fieldType: 'filter-input-width',
-    onChangeValue: function(){
-      this.get('parentView').updateFilter(this.get('column'), this.get('value'), 'string');
-    }
-  }),
-
-  statusFilterView: filters.createSelectView({
-    column: 1,
-    defaultValue: "All Status",
-    fieldType: 'filter-input-width',
-    content: function() {
-      return this.get('parentView.statusList');
-    }.property('parentView.statusList'),
-    onChangeValue: function(){
-      this.get('parentView').updateFilter(this.get('column'), this.get('value') == "STOPPED" ? "FROZEN" : this.get('value'), 'string', this.get('defaultValue'));
-    },
-    emptyValue: 'All Status'
-  }),
-
-  typeFilterView: filters.createTextView({
-    column: 2,
-    fieldType: 'filter-input-width',
-    onChangeValue: function(){
-      this.get('parentView').updateFilter(this.get('column'), this.get('value'), 'string');
-    }
-  }),
-
-  userFilterView: filters.createTextView({
-    column: 3,
-    fieldType: 'filter-input-width',
-    onChangeValue: function(){
-      this.get('parentView').updateFilter(this.get('column'), this.get('value'), 'string');
-    }
-  }),
-
-  startFilterView: filters.createSelectView({
-    column: 4,
-    defaultValue: "All Dates",
-    fieldType: 'filter-input-width',
-    content: ['All Dates', 'Past 1 hour',  'Past 1 Day', 'Past 2 Days', 'Past 7 Days', 'Past 14 Days', 'Past 30 Days'],
-    onChangeValue: function(){
-      this.get('parentView').updateFilter(this.get('column'), this.get('value'), 'date', this.get('defaultValue'));
-    },
-    type: 'number',
-    emptyValue: 'All Dates'
-  }),
-
-  /**
-   * associations between host property and column index
-   * @type {Array}
-   */
-  colPropAssoc: function(){
-    var associations = [];
-    associations[0] = 'name';
-    associations[1] = 'status';
-    associations[2] = 'appType';
-    associations[3] = 'user';
-    associations[4] = 'started';
-    associations[5] = 'ended';
-    return associations;
-  }.property()
-
-});
-
-App.SliderTooltip = Em.View.extend({
-  templateName: "common/app_tooltip"
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/config.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/config.js b/contrib/views/slider/src/main/resources/ui/config.js
deleted file mode 100755
index dadbcbf..0000000
--- a/contrib/views/slider/src/main/resources/ui/config.js
+++ /dev/null
@@ -1,123 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-exports.config = {
-  paths: {
-    watched: ['app', 'envs', 'vendor', 'test']
-  },
-  fileListInterval: 500,
-  files: {
-    javascripts: {
-      joinTo: {
-        'javascripts/app.js': /^(app|envs\/development)/,
-        'javascripts/vendor.js': /^(vendor\/scripts\/(common|development)|vendor\\scripts\\(common|development))/,
-        'javascripts/test.js': /^test(\/|\\)(?!vendor)/
-      },
-      order: {
-        before: [
-          'vendor/scripts/common/d3.v2.js',
-          'vendor/scripts/common/tv4.js',
-          'vendor/scripts/common/cubism.v1.js',
-          'vendor/scripts/common/rickshaw.js',
-          'vendor/scripts/common/console-polyfill.js',
-          'vendor/scripts/common/jquery.js',
-          'vendor/scripts/common/jquery.ui.core.js',
-          'vendor/scripts/common/jquery.ui.widget.js',
-          'vendor/scripts/common/jquery.ui.mouse.js',
-          'vendor/scripts/common/jquery.ui.sortable.js',
-          'vendor/scripts/common/jquery.timeago.js',
-          'vendor/scripts/common/handlebars.js',
-          'vendor/scripts/development/ember.js',
-          'vendor/scripts/production/ember-data.js',
-          'vendor/scripts/common/bs-core.min.js',
-          'vendor/scripts/common/bs-nav.min.js',
-          'vendor/scripts/common/bs-basic.min.js',
-          'vendor/scripts/common/bs-button.min.js',
-          'vendor/scripts/common/bs-modal.min.js',
-          'vendor/scripts/common/bs-popover.min.js',
-          'vendor/scripts/common/ember-i18n-1.4.1.js',
-          'vendor/scripts/common/bootstrap.js',
-          'vendor/scripts/common/moment.min.js'
-        ]
-      }
-    },
-    stylesheets: {
-      joinTo: {
-        'stylesheets/app.css': /^(app|vendor)/
-      },
-      order: {
-        before: [
-          'vendor/styles/cubism.css',
-          'vendor/styles/rickshaw.css',
-          'vendor/styles/bootstrap.css',
-          'vendor/styles/font-awesome.css',
-          'vendor/styles/font-awesome-ie7.css'
-        ]
-      }
-    },
-    templates: {
-      precompile: true,
-      root: 'templates',
-      joinTo: {
-        'javascripts/app.js': /^app/
-      }
-    }
-  },
-  overrides: {
-
-    // Production Settings
-    production: {
-      files: {
-        javascripts: {
-          joinTo: {
-            'javascripts/app.js': /^(app|envs\/production)/,
-            'javascripts/vendor.js': /^(vendor\/scripts\/(common|production)|vendor\\scripts\\(common|production))/
-          },
-          order: {
-            before: [
-              'vendor/scripts/common/d3.v2.js',
-              'vendor/scripts/common/cubism.v1.js',
-              'vendor/scripts/common/rickshaw.js',
-              'vendor/scripts/common/console-polyfill.js',
-              'vendor/scripts/common/jquery.js',
-              'vendor/scripts/common/handlebars.js',
-              'vendor/scripts/production/ember.js',
-              'vendor/scripts/production/ember-data.js',
-              'vendor/scripts/common/bs-core.min.js',
-              'vendor/scripts/common/bs-nav.min.js',
-              'vendor/scripts/common/bs-basic.min.js',
-              'vendor/scripts/common/bs-button.min.js',
-              'vendor/scripts/common/bs-modal.min.js',
-              'vendor/scripts/common/bs-popover.min.js',
-              'vendor/scripts/common/ember-i18n-1.4.1.js',
-              'vendor/scripts/common/bootstrap.js',
-              'vendor/scripts/common/moment.min.js'
-            ]
-          }
-        }
-      },
-      optimize: true,
-      sourceMaps: false,
-      plugins: {
-        autoReload: {
-          enabled: false
-        }
-      }
-    }
-  }
-};

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/envs/development/env.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/envs/development/env.js b/contrib/views/slider/src/main/resources/ui/envs/development/env.js
deleted file mode 100644
index 0af97c1..0000000
--- a/contrib/views/slider/src/main/resources/ui/envs/development/env.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-module.exports = 'development';

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/envs/production/env.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/envs/production/env.js b/contrib/views/slider/src/main/resources/ui/envs/production/env.js
deleted file mode 100644
index addbc80..0000000
--- a/contrib/views/slider/src/main/resources/ui/envs/production/env.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-module.exports = 'production';

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/generators/arraycontroller/arraycontroller.js.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/generators/arraycontroller/arraycontroller.js.hbs b/contrib/views/slider/src/main/resources/ui/generators/arraycontroller/arraycontroller.js.hbs
deleted file mode 100644
index 4934e09..0000000
--- a/contrib/views/slider/src/main/resources/ui/generators/arraycontroller/arraycontroller.js.hbs
+++ /dev/null
@@ -1,23 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-'use strict';
-
-module.exports = App.{{#camelize}}{{pluralName}}{{/camelize}}Controller = Ember.ArrayController.extend({
-  content:[]
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/generators/arraycontroller/generator.json
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/generators/arraycontroller/generator.json b/contrib/views/slider/src/main/resources/ui/generators/arraycontroller/generator.json
deleted file mode 100755
index 1f13804..0000000
--- a/contrib/views/slider/src/main/resources/ui/generators/arraycontroller/generator.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "name": "arraycontroller",
-  "files": [
-    {
-      "from": "arraycontroller.js.hbs",
-      "to": "app/controllers/{{#camelize}}{{pluralName}}{{/camelize}}Controller.js"
-    }
-  ],
-  "dependencies": []
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/generators/component/component.hbs.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/generators/component/component.hbs.hbs b/contrib/views/slider/src/main/resources/ui/generators/component/component.hbs.hbs
deleted file mode 100755
index e1667a5..0000000
--- a/contrib/views/slider/src/main/resources/ui/generators/component/component.hbs.hbs
+++ /dev/null
@@ -1,19 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<p>{{#camelize}}{{name}}{{/camelize}}Component</p>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/generators/component/component.js.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/generators/component/component.js.hbs b/contrib/views/slider/src/main/resources/ui/generators/component/component.js.hbs
deleted file mode 100755
index 14903e8..0000000
--- a/contrib/views/slider/src/main/resources/ui/generators/component/component.js.hbs
+++ /dev/null
@@ -1,23 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-'use strict';
-
-module.exports = App.{{#camelize}}{{name}}{{/camelize}}Component = Ember.Component.extend({
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/generators/component/generator.json
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/generators/component/generator.json b/contrib/views/slider/src/main/resources/ui/generators/component/generator.json
deleted file mode 100755
index a9f87b5..0000000
--- a/contrib/views/slider/src/main/resources/ui/generators/component/generator.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "name": "component",
-  "files": [
-    {
-      "from": "component.js.hbs",
-      "to": "app/components/{{#camelize}}{{name}}{{/camelize}}Component.js"
-    },
-    {
-      "from": "component.hbs.hbs",
-      "to": "app/templates/components/{{name}}.hbs"
-    }
-  ],
-  "dependencies": []
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/generators/controller/controller.js.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/generators/controller/controller.js.hbs b/contrib/views/slider/src/main/resources/ui/generators/controller/controller.js.hbs
deleted file mode 100755
index 83d0f9e..0000000
--- a/contrib/views/slider/src/main/resources/ui/generators/controller/controller.js.hbs
+++ /dev/null
@@ -1,23 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-'use strict';
-
-module.exports = App.{{#camelize}}{{name}}{{/camelize}}Controller = Ember.ObjectController.extend({
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/generators/controller/generator.json
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/generators/controller/generator.json b/contrib/views/slider/src/main/resources/ui/generators/controller/generator.json
deleted file mode 100755
index 9f6a1fd..0000000
--- a/contrib/views/slider/src/main/resources/ui/generators/controller/generator.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "name": "controller",
-  "files": [
-    {
-      "from": "controller.js.hbs",
-      "to": "app/controllers/{{#camelize}}{{name}}{{/camelize}}Controller.js"
-    }
-  ],
-  "dependencies": []
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/generators/helper/generator.json
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/generators/helper/generator.json b/contrib/views/slider/src/main/resources/ui/generators/helper/generator.json
deleted file mode 100755
index 181fc9f..0000000
--- a/contrib/views/slider/src/main/resources/ui/generators/helper/generator.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "name": "helper",
-  "files": [
-    {
-      "from": "helper.js.hbs",
-      "to": "app/helpers/{{name}}.js"
-    }
-  ],
-  "dependencies": []
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/generators/helper/helper.js.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/generators/helper/helper.js.hbs b/contrib/views/slider/src/main/resources/ui/generators/helper/helper.js.hbs
deleted file mode 100755
index c010966..0000000
--- a/contrib/views/slider/src/main/resources/ui/generators/helper/helper.js.hbs
+++ /dev/null
@@ -1,24 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-'use strict';
-
-module.exports = Ember.Handlebars.helper('{{name}}', function(value, options) {
-
-});
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/generators/model/generator.json
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/generators/model/generator.json b/contrib/views/slider/src/main/resources/ui/generators/model/generator.json
deleted file mode 100755
index 268ff5b..0000000
--- a/contrib/views/slider/src/main/resources/ui/generators/model/generator.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "name": "model",
-  "files": [
-    {
-      "from": "model.js.hbs",
-      "to": "app/models/{{#camelize}}{{name}}{{/camelize}}.js"
-    }
-  ],
-  "dependencies": []
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/generators/model/model.js.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/generators/model/model.js.hbs b/contrib/views/slider/src/main/resources/ui/generators/model/model.js.hbs
deleted file mode 100755
index 1a02716..0000000
--- a/contrib/views/slider/src/main/resources/ui/generators/model/model.js.hbs
+++ /dev/null
@@ -1,24 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-'use strict';
-
-module.exports = App.{{#camelize}}{{name}}{{/camelize}} = DS.Model.extend({
-
-});
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/generators/route/generator.json
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/generators/route/generator.json b/contrib/views/slider/src/main/resources/ui/generators/route/generator.json
deleted file mode 100755
index aa6d3ff..0000000
--- a/contrib/views/slider/src/main/resources/ui/generators/route/generator.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "name": "route",
-  "files": [
-    {
-      "from": "route.js.hbs",
-      "to": "app/routes/{{#camelize}}{{name}}{{/camelize}}Route.js"
-    }
-  ],
-  "dependencies": []
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/generators/route/route.js.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/generators/route/route.js.hbs b/contrib/views/slider/src/main/resources/ui/generators/route/route.js.hbs
deleted file mode 100755
index b43d238..0000000
--- a/contrib/views/slider/src/main/resources/ui/generators/route/route.js.hbs
+++ /dev/null
@@ -1,25 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-'use strict';
-
-module.exports = App.{{#camelize}}{{name}}{{/camelize}}Route = Ember.Route.extend({
-  model: function() {
-
-  }
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/generators/template/generator.json
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/generators/template/generator.json b/contrib/views/slider/src/main/resources/ui/generators/template/generator.json
deleted file mode 100755
index 4a8cf02..0000000
--- a/contrib/views/slider/src/main/resources/ui/generators/template/generator.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "name": "template",
-  "files": [
-    {
-      "from": "template.hbs.hbs",
-      "to": "app/templates/{{name}}.hbs"
-    }
-  ],
-  "dependencies": []
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/generators/template/template.hbs.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/generators/template/template.hbs.hbs b/contrib/views/slider/src/main/resources/ui/generators/template/template.hbs.hbs
deleted file mode 100755
index 2cd42e4..0000000
--- a/contrib/views/slider/src/main/resources/ui/generators/template/template.hbs.hbs
+++ /dev/null
@@ -1,19 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<p>{{name}} Template</p>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/generators/view/generator.json
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/generators/view/generator.json b/contrib/views/slider/src/main/resources/ui/generators/view/generator.json
deleted file mode 100755
index 88267ff..0000000
--- a/contrib/views/slider/src/main/resources/ui/generators/view/generator.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "name": "view",
-  "files": [
-    {
-      "from": "view.js.hbs",
-      "to": "app/views/{{#camelize}}{{name}}{{/camelize}}View.js"
-    }
-  ],
-  "dependencies": []
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/generators/view/view.js.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/generators/view/view.js.hbs b/contrib/views/slider/src/main/resources/ui/generators/view/view.js.hbs
deleted file mode 100755
index 4c43ecd..0000000
--- a/contrib/views/slider/src/main/resources/ui/generators/view/view.js.hbs
+++ /dev/null
@@ -1,23 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-'use strict';
-
-module.exports = App.{{#camelize}}{{name}}{{/camelize}}View = Ember.View.extend({
-  templateName: '{{name}}'
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/karma.conf.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/karma.conf.js b/contrib/views/slider/src/main/resources/ui/karma.conf.js
deleted file mode 100755
index c323a29..0000000
--- a/contrib/views/slider/src/main/resources/ui/karma.conf.js
+++ /dev/null
@@ -1,94 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-// Karma configuration
-// Generated on Fri Sep 06 2013 16:44:32 GMT-0400 (AST)
-
-module.exports = function(config) {
-  config.set({
-
-    // base path, that will be used to resolve files and exclude
-    basePath: '',
-
-
-    // frameworks to use
-    frameworks: ['qunit'],
-
-
-    // list of files / patterns to load in the browser
-    files: [
-      'public/javascripts/vendor.js',
-      'public/javascripts/app.js',
-      'test/helpers.js',
-      'test/**/*_test.js'
-    ],
-
-
-    // list of files to exclude
-    exclude: [
-
-    ],
-
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress', 'junit', 'growl', 'coverage'
-    reporters: ['progress'],
-
-
-    // web server port
-    port: 9876,
-
-
-    // enable / disable colors in the output (reporters and logs)
-    colors: true,
-
-
-    // level of logging
-    // possible values:
-    // config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN ||
-    // config.LOG_INFO || config.LOG_DEBUG
-    logLevel: config.LOG_INFO,
-
-
-    // enable / disable watching file and executing
-    // tests whenever any file changes
-    autoWatch: true,
-
-
-    // Start these browsers, currently available:
-    // - Chrome
-    // - ChromeCanary
-    // - Firefox
-    // - Opera
-    // - Safari (only Mac)
-    // - PhantomJS
-    // - IE (only Windows)
-    browsers: ['PhantomJS'],
-
-
-    // If browser does not capture in given timeout [ms], kill it
-    captureTimeout: 60000,
-
-
-    // Continuous Integration mode
-    // if true, it capture browsers, run tests and exit
-    singleRun: false
-  });
-};

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/package.json
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/package.json b/contrib/views/slider/src/main/resources/ui/package.json
deleted file mode 100755
index 7658ae7..0000000
--- a/contrib/views/slider/src/main/resources/ui/package.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
-  "author": "Giovanni Collazo",
-  "name": "brunch-with-ember-reloaded",
-  "description": "A new and up-to-date Brunch skeleton for developing Ember applications",
-  "version": "1.2.0",
-  "homepage": "https://github.com/gcollazo/brunch-with-ember-reloaded",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/gcollazo/brunch-with-ember-reloaded.git"
-  },
-  "engines": {
-    "node": "~0.6.10 || 0.8 || 0.9"
-  },
-  "scripts": {
-    "test": "phantomjs runner.js public/tests.html",
-    "start": "brunch watch --server",
-    "build": "brunch build",
-    "build:production": "brunch build --production",
-    "update:ember": "node setup.js update:ember",
-    "update:skeleton": "node setup.js update:skeleton"
-  },
-  "dependencies": {
-    "clean-css-brunch": ">= 1.0 < 1.8",
-    "coffee-script-brunch": ">= 1.0 < 1.8",
-    "css-brunch": ">= 1.0 < 1.8",
-    "ember-handlebars-brunch": "git://github.com/fuseelements/ember-handlebars-brunch#fix/ember-1.3.0",
-    "handlebars": "^4.0.10",
-    "javascript-brunch": ">= 1.0 < 1.8",
-    "stylus-brunch": ">= 1.0 < 1.8",
-    "uglify-js-brunch": ">= 1.0 < 1.8"
-  },
-  "devDependencies": {
-    "karma": "*",
-    "karma-phantomjs-launcher": "~0.1.2",
-    "karma-qunit": "*",
-    "phantomjs": "^1.9.2"
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/runner.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/runner.js b/contrib/views/slider/src/main/resources/ui/runner.js
deleted file mode 100644
index 4fd7894..0000000
--- a/contrib/views/slider/src/main/resources/ui/runner.js
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * PhantomJS Runner QUnit Plugin (List Tests) 1.2.0
- *
- * PhantomJS binaries: http://phantomjs.org/download.html
- * Requires PhantomJS 1.6+ (1.7+ recommended)
- *
- * Run with:
- *   phantomjs runner-list.js [url-of-your-qunit-testsuite]
- *
- * e.g.
- *   phantomjs runner-list.js http://localhost/qunit/test/index.html
- */
-
-/*global phantom:false, require:false, console:false, window:false, QUnit:false */
-
-(function() {
-  'use strict';
-
-  var url, page, timeout,
-    args = require('system').args;
-
-  // arg[0]: scriptName, args[1...]: arguments
-  if (args.length < 2 || args.length > 3) {
-    console.error('Usage:\n  phantomjs runner-list.js [url-of-your-qunit-testsuite] [timeout-in-seconds]');
-    phantom.exit(1);
-  }
-
-  url = args[1];
-  page = require('webpage').create();
-  if (args[2] !== undefined) {
-    timeout = parseInt(args[2], 10);
-  }
-
-  // Route `console.log()` calls from within the Page context to the main Phantom context (i.e. current `this`)
-  page.onConsoleMessage = function(msg) {
-    console.log(msg);
-  };
-
-  page.onInitialized = function() {
-    page.evaluate(addLogging);
-  };
-
-  page.onCallback = function(message) {
-    var result,
-      failed;
-
-    if (message) {
-      if (message.name === 'QUnit.done') {
-        result = message.data;
-        failed = !result || !result.total || result.failed;
-
-        if (!result.total) {
-          console.error('No tests were executed. Are you loading tests asynchronously?');
-        }
-
-        phantom.exit(failed ? 1 : 0);
-      }
-    }
-  };
-
-  page.open(url, function(status) {
-    if (status !== 'success') {
-      console.error('Unable to access network: ' + status);
-      phantom.exit(1);
-    } else {
-      // Cannot do this verification with the 'DOMContentLoaded' handler because it
-      // will be too late to attach it if a page does not have any script tags.
-      var qunitMissing = page.evaluate(function() { return (typeof QUnit === 'undefined' || !QUnit); });
-      if (qunitMissing) {
-        console.error('The `QUnit` object is not present on this page.');
-        phantom.exit(1);
-      }
-
-      // Set a timeout on the test running, otherwise tests with async problems will hang forever
-      if (typeof timeout === 'number') {
-        setTimeout(function() {
-          console.error('The specified timeout of ' + timeout + ' seconds has expired. Aborting...');
-          phantom.exit(1);
-        }, timeout * 1000);
-      }
-
-      // Do nothing... the callback mechanism will handle everything!
-    }
-  });
-
-  function addLogging() {
-    window.document.addEventListener('DOMContentLoaded', function() {
-      var currentTestAssertions = [];
-
-      QUnit.log(function(details) {
-        var response;
-
-        console.log((details.result ? "? ": "? ") + details.message);
-
-        if (!details.result) {
-          response = details.message || '';
-
-          if (typeof details.expected !== 'undefined') {
-            if (response) {
-              response += ', ';
-            }
-
-            response += 'expected: ' + details.expected + ', but was: ' + details.actual;
-          }
-
-          if (details.source) {
-            response += '\n' + details.source;
-          }
-
-          console.log('    Failed assertion: ' + response);
-        }
-      });
-
-      QUnit.moduleStart(function( details ) {
-        if (details.name) {
-          console.log('\n' + details.name);
-        }
-      });
-
-      QUnit.testStart(function(result) {
-        console.log('\n' + result.name);
-      });
-
-      QUnit.done(function(result) {
-        console.log('\n' + 'Took ' + result.runtime +  'ms to run ' + result.total + ' tests. ' + result.passed + ' passed, ' + result.failed + ' failed.');
-
-        if (typeof window.callPhantom === 'function') {
-          window.callPhantom({
-            'name': 'QUnit.done',
-            'data': result
-          });
-        }
-      });
-    }, false);
-  }
-})();

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/setup.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/setup.js b/contrib/views/slider/src/main/resources/ui/setup.js
deleted file mode 100644
index 5287233..0000000
--- a/contrib/views/slider/src/main/resources/ui/setup.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-var command = process.argv[2],
-    exec = require('child_process').exec;
-
-
-var skeletonURL = 'https://codeload.github.com/gcollazo/brunch-with-ember-reloaded/zip/master';
-var fileSources = [
-  {
-    src: 'http://builds.emberjs.com/release/ember.js',
-    dest: 'vendor/scripts/development/ember.js'
-  },
-  {
-    src: 'http://builds.emberjs.com.s3.amazonaws.com/ember-data-latest.js',
-    dest: 'vendor/scripts/development/ember-data.js'
-  },
-  {
-    src: 'http://builds.emberjs.com/release/ember.prod.js',
-    dest: 'vendor/scripts/production/ember.js'
-  },
-  {
-    src: 'http://builds.emberjs.com.s3.amazonaws.com/ember-data-latest.prod.js',
-    dest: 'vendor/scripts/production/ember-data.js'
-  }
-];
-
-
-switch (command) {
-  case 'update:ember':
-    console.log('-> Downloading files...');
-    fileSources.forEach(function(file) {
-      exec('curl ' + file.src + ' > ' + file.dest);
-    });
-    break;
-
-  case 'update:skeleton':
-    exec('curl ' + skeletonURL + '> master.zip', function() {
-      exec('unzip master.zip', function() {
-        exec('cat brunch-with-ember-reloaded-master/config.js > config.js');
-        exec('cat brunch-with-ember-reloaded-master/karma.conf.js > karma.conf.js');
-        exec('cat brunch-with-ember-reloaded-master/package.json > package.json');
-        exec('cat brunch-with-ember-reloaded-master/README.md > README.md');
-        exec('cat brunch-with-ember-reloaded-master/setup.js > setup.js');
-        exec('rm -rf generators', function() {
-          exec('mv brunch-with-ember-reloaded-master/generators/ generators/', function() {
-            exec('rm -rf brunch-with-ember-reloaded-master');
-            exec('rm -r master.zip');
-          });
-        });
-      });
-    });
-    break;
-
-  default:
-    console.log();
-    console.log('Usage:');
-    console.log('\tnpm run update:ember     Updates ember.js an ember-data.js');
-    console.log('\tnpm run update:skeleton  Updates all skeleton files');
-    console.log();
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/test/index.md
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/test/index.md b/contrib/views/slider/src/main/resources/ui/test/index.md
deleted file mode 100644
index 01f4910..0000000
--- a/contrib/views/slider/src/main/resources/ui/test/index.md
+++ /dev/null
@@ -1,28 +0,0 @@
-<!---
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements.  See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License.  You may obtain a copy of the License at [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
--->
-
-# Slider UI Unit Tests
-
-Go to slider-ui folder - `/contrib/views/slider/src/main/resources/ui/`
-Execute:
-
-1. `npm i`
-2. `brunch w -s`
-
-Open in browser `http://localhost:3333/tests.html`
-
-OR
-
-Execute in console `node_modules/phantomjs/bin/phantomjs runner.js public/tests.html`
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/test/integration/pages/index_test.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/test/integration/pages/index_test.js b/contrib/views/slider/src/main/resources/ui/test/integration/pages/index_test.js
deleted file mode 100644
index 641a856..0000000
--- a/contrib/views/slider/src/main/resources/ui/test/integration/pages/index_test.js
+++ /dev/null
@@ -1,127 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-QUnit.module('integration/pages - index', {
-
-  setup: function () {
-    sinon.config.useFakeTimers = false;
-    App.set('viewEnabled', true);
-    App.__container__.lookup('controller:Slider').getViewDisplayParametersSuccessCallback({
-      "ViewInstanceInfo": {
-        "context_path": "/views/SLIDER/1.0.0/s1",
-        "description": "DESCRIPTION",
-        "label": "SLIDER LABEL",
-        "properties": {
-          "slider.user": "admin"
-        }
-      }
-    });
-    Ember.run(App, App.advanceReadiness);
-  },
-
-  teardown: function () {
-    App.reset();
-  }
-
-});
-
-test('route', function () {
-
-  visit('/');
-  andThen(function () {
-    equal(currentRouteName(), 'slider_apps.index', 'route is valid');
-    equal(currentPath(), 'slider_apps.index', 'path is valid');
-    equal(currentURL(), '/', 'url is valid');
-  });
-
-});
-
-test('sliderConfigs', function () {
-
-  visit('/');
-  // configs count may be changed by adding new slider-configs
-  equal(App.SliderApp.store.all('sliderConfig').content.length, 4, 'slider configs should be set');
-
-});
-
-test('Create-App button', function () {
-
-  visit('/');
-  click('.create-app a');
-
-  andThen(function () {
-    equal(currentRouteName(), 'createAppWizard.step1', 'route is valid');
-    equal(currentPath(), 'slider_apps.createAppWizard.step1', 'path is valid');
-    equal(currentURL(), '/createAppWizard/step1', 'url is valid');
-  });
-
-});
-
-test('Create-App button visible/hidden', function () {
-
-  Em.run(function () {
-    App.__container__.lookup('controller:application').set('hasConfigErrors', true);
-  });
-
-  visit('/');
-  equal(find('.create-app').length, 0, 'Create App button should be hidden if some config errors');
-
-});
-
-test('Slider Title', function () {
-
-  visit('/');
-  equal(find('.slider-app-title').text(), 'SLIDER LABEL', 'App has valid Slider Title');
-
-});
-
-test('Slider Title Popover', function () {
-
-  visit('/');
-  triggerEvent('#slider-title', 'mouseenter'); // not hover!
-  andThen(function () {
-    equal(find('.popover').length, 1, 'popover exists');
-    equal(find('.popover-title').text(), 'SLIDER LABEL', 'popover has valid title');
-    equal(find('.slider-description').text(), 'DESCRIPTION', 'popover has slider description');
-  });
-
-});
-
-test('Clear Filters', function () {
-
-  visit('/');
-  fillIn('#filter-row input:eq(0)', 'Some val');
-  find('#filter-row select:eq(0)  :nth-child(1)').attr('selected', 'selected');
-  fillIn('#filter-row input:eq(1)', 'Some val');
-  fillIn('#filter-row input:eq(2)', 'Some val');
-  find('#filter-row select:eq(1) :nth-child(1)').attr('selected', 'selected');
-
-  andThen(function () {
-    click('.clearFiltersLink');
-
-    andThen(function () {
-      equal(find('#filter-row input:eq(0)').val(), '');
-      equal(find('#filter-row select:eq(0)').val(), 'All Status');
-      equal(find('#filter-row input:eq(1)').val(), '');
-      equal(find('#filter-row input:eq(2)').val(), '');
-      equal(find('#filter-row select:eq(1)').val(), 'All Dates');
-
-    });
-  });
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/test/integration/pages/slider_errors_test.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/test/integration/pages/slider_errors_test.js b/contrib/views/slider/src/main/resources/ui/test/integration/pages/slider_errors_test.js
deleted file mode 100644
index 6ccc89c..0000000
--- a/contrib/views/slider/src/main/resources/ui/test/integration/pages/slider_errors_test.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-QUnit.module('integration/pages - index', {
-
-  setup: function () {
-    sinon.config.useFakeTimers = false;
-    Ember.run(App, App.advanceReadiness);
-    Em.run(function () {
-      var p = {
-        validations: [
-          {message: 'Some mythical error'},
-          {message: 'Error with DNA'}
-        ],
-        parameters: {}
-      };
-      App.__container__.lookup('controller:Slider').getParametersFromViewPropertiesSuccessCallback(p);
-    });
-  },
-
-  teardown: function () {
-    App.reset();
-  }
-
-});
-
-test('Slider has validation errors', function () {
-
-  visit('/');
-  equal(find('.error-message').length, 2, 'Error-messages exist on the page');
-  ok(find('.create-app a').attr('disabled'), 'Create App button is disabled');
-
-});
-
-test('Slider has no validation errors', function () {
-
-  Em.run(function () {
-    App.__container__.lookup('controller:Slider').getParametersFromViewPropertiesSuccessCallback({
-      validations: [],
-      parameters: {}
-    });
-  });
-
-  visit('/');
-  equal(find('.error-message').length, 0, 'No error-messages on the page');
-  ok(!find('.create-app a').attr('disabled'), 'Create App button is enabled');
-
-});
\ No newline at end of file


[36/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/data/apps/apps.json
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/data/apps/apps.json b/contrib/views/slider/src/main/resources/ui/app/assets/data/apps/apps.json
deleted file mode 100644
index 23423d8..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/data/apps/apps.json
+++ /dev/null
@@ -1,1320 +0,0 @@
-{
-  "href" : "http://c6401:8080/api/v1/views/SLIDER/versions/1.0.0/instances/SLIDER_1/apps/?fields=*&_=1409569396360",
-  "items" : [
-    {
-      "href" : "http://c6401:8080/api/v1/views/SLIDER/versions/1.0.0/instances/SLIDER_1/apps/1409333994422_5",
-      "appVersion" : "0.98.4-hadoop2",
-      "description" : "apache hbase is the hadoop database, a distributed, scalable, big data store....",
-      "diagnostics" : "",
-      "endTime" : 0,
-      "id" : "1409333994422_5",
-      "instance_name" : "SLIDER_1",
-      "metrics" : null,
-      "name" : "h4",
-      "startTime" : 1409348496653,
-      "state" : "FROZEN",
-      "type" : "hbase",
-      "user" : "yarn",
-      "version" : "1.0.0",
-      "view_name" : "SLIDER",
-      "yarnId" : "application_1409333994422_0005",
-      "supportedMetrics" : [
-        "firstMetric",
-        "secondMetric"
-      ],
-      "alerts" : {
-        "detail" : [
-          {
-            "description" : "alert1",
-            "host_name" : "с6402.ambari.apache.org",
-            "last_status" : "CRITICAL",
-            "last_status_time" : 1409689349,
-            "service_name" : "HBASE",
-            "status" : "OK",
-            "status_time" : 1409703869,
-            "output" : "Connection refused",
-            "actual_status" : "CRITICAL"
-          },
-          {
-            "description" : "alert2",
-            "host_name" : "с6402.ambari.apache.org",
-            "last_status" : "OK",
-            "last_status_time" : 1409334745,
-            "service_name" : "HBASE",
-            "status" : "WARNING",
-            "status_time" : 1409703865,
-            "output" : "TCP OK - 0.001 second response time on port 9083",
-            "actual_status" : "OK"
-          },
-          {
-            "description" : "NameNode edit logs directory status on dev01.hortonworks.com",
-            "host_name" : "dev01.hortonworks.com",
-            "last_status" : "WARNING",
-            "last_status_time" : 1389788011,
-            "service_name" : "HBASE",
-            "status" : "CRITICAL",
-            "status_time" : 1389793171,
-            "output" : "WARNING: NameNode directory status not available via http://dev01.hortonworks.com:50070/jmx url, code 0"
-          },
-          {
-            "description" : "NameNode host CPU utilization on dev01.hortonworks.com",
-            "host_name" : "dev01.hortonworks.com",
-            "last_status" : "OK",
-            "last_status_time" : 1389636534,
-            "service_name" : "HBASE",
-            "status" : "PASSIVE",
-            "status_time" : 1389793060,
-            "output" : "1 CPU, load 19.0% &lt; 200% : OK"
-          },
-          {
-            "description" : "App Timeline Server Web UI",
-            "host_name" : "dev01.hortonworks.com",
-            "last_status" : "WARNING",
-            "last_status_time" : 1389636534,
-            "service_name" : "HBASE",
-            "status" : "UNKNOWN",
-            "status_time" : 1389793060,
-            "output" : "1 CPU, load 19.0% &lt; 200% : OK"
-          }
-        ],
-        "summary" : {
-          "CRITICAL" : 1,
-          "OK" : 1,
-          "PASSIVE" : 0,
-          "WARNING" : 0
-        }
-      },
-      "components" : {
-        "HBASE_MASTER" : {
-          "componentName" : "HBASE_MASTER",
-          "instanceCount" : 2,
-          "activeContainers" : {
-            "container_1409333994422_0005_01_000002" : {
-              "released" : "false",
-              "startTime" : "1409348511279",
-              "createTime" : "1409348510529",
-              "environment" : "[AGENT_WORK_ROOT=\"$PWD\", HADOOP_USER_NAME=\"yarn\", AGENT_LOG_ROOT=\"$LOG_DIRS\", PYTHONPATH=\"./infra/agent/slider-agent/\", SLIDER_PASSPHRASE=\"DEV\"]",
-              "host" : "с6402.ambari.apache.org",
-              "name" : "container_1409333994422_0005_01_000002",
-              "command" : "python ./infra/agent/slider-agent/agent/main.py --label container_1409333994422_0005_01_000002___HBASE_MASTER --zk-quorum с6401.ambari.apache.org:2181 --zk-reg-path /registry/org-apache-slider/h4 ; ",
-              "state" : "3",
-              "role" : "HBASE_MASTER",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "1"
-            },
-            "container_1409333994422_0005_01_000003" : {
-              "released" : "false",
-              "startTime" : "1409348511279",
-              "createTime" : "1409348510529",
-              "environment" : "[AGENT_WORK_ROOT=\"$PWD\", HADOOP_USER_NAME=\"yarn\", AGENT_LOG_ROOT=\"$LOG_DIRS\", PYTHONPATH=\"./infra/agent/slider-agent/\", SLIDER_PASSPHRASE=\"DEV\"]",
-              "host" : "с6402.ambari.apache.org",
-              "name" : "container_1409333994422_0005_01_000002",
-              "command" : "python ./infra/agent/slider-agent/agent/main.py --label container_1409333994422_0005_01_000002___HBASE_MASTER --zk-quorum с6401.ambari.apache.org:2181 --zk-reg-path /registry/org-apache-slider/h4 ; ",
-              "state" : "3",
-              "role" : "HBASE_MASTER",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "1"
-            }
-          },
-          "completedContainers" : { }
-        },
-        "HBASE_REGIONSERVER" : {
-          "componentName" : "HBASE_REGIONSERVER",
-          "instanceCount" : 1,
-          "activeContainers" : {
-            "container_1409333994422_0005_01_000003" : {
-              "released" : "false",
-              "startTime" : "1409348510717",
-              "createTime" : "1409348510581",
-              "environment" : "[AGENT_WORK_ROOT=\"$PWD\", HADOOP_USER_NAME=\"yarn\", AGENT_LOG_ROOT=\"$LOG_DIRS\", PYTHONPATH=\"./infra/agent/slider-agent/\", SLIDER_PASSPHRASE=\"DEV\"]",
-              "host" : "с6403.ambari.apache.org",
-              "name" : "container_1409333994422_0005_01_000003",
-              "command" : "python ./infra/agent/slider-agent/agent/main.py --label container_1409333994422_0005_01_000003___HBASE_REGIONSERVER --zk-quorum с6401.ambari.apache.org:2181 --zk-reg-path /registry/org-apache-slider/h4 ; ",
-              "state" : "3",
-              "role" : "HBASE_REGIONSERVER",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "2"
-            }
-          },
-          "completedContainers" : { }
-        },
-        "HBASE_REST" : {
-          "componentName" : "HBASE_REST",
-          "instanceCount" : 1,
-          "activeContainers" : {
-            "container_1409333994422_0005_01_000004" : {
-              "released" : "false",
-              "startTime" : "1409348511120",
-              "createTime" : "1409348510581",
-              "environment" : "[AGENT_WORK_ROOT=\"$PWD\", HADOOP_USER_NAME=\"yarn\", AGENT_LOG_ROOT=\"$LOG_DIRS\", PYTHONPATH=\"./infra/agent/slider-agent/\", SLIDER_PASSPHRASE=\"DEV\"]",
-              "host" : "с6401.ambari.apache.org",
-              "name" : "container_1409333994422_0005_01_000004",
-              "command" : "python ./infra/agent/slider-agent/agent/main.py --label container_1409333994422_0005_01_000004___HBASE_REST --zk-quorum с6401.ambari.apache.org:2181 --zk-reg-path /registry/org-apache-slider/h4 ; ",
-              "state" : "3",
-              "role" : "HBASE_REST",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "3"
-            }
-          },
-          "completedContainers" : { }
-        },
-        "HBASE_THRIFT" : {
-          "componentName" : "HBASE_THRIFT",
-          "instanceCount" : 1,
-          "activeContainers" : {
-            "container_1409333994422_0005_01_000005" : {
-              "released" : "false",
-              "startTime" : "1409348511479",
-              "createTime" : "1409348510555",
-              "environment" : "[AGENT_WORK_ROOT=\"$PWD\", HADOOP_USER_NAME=\"yarn\", AGENT_LOG_ROOT=\"$LOG_DIRS\", PYTHONPATH=\"./infra/agent/slider-agent/\", SLIDER_PASSPHRASE=\"DEV\"]",
-              "host" : "с6404.ambari.apache.org",
-              "name" : "container_1409333994422_0005_01_000005",
-              "command" : "python ./infra/agent/slider-agent/agent/main.py --label container_1409333994422_0005_01_000005___HBASE_THRIFT --zk-quorum с6401.ambari.apache.org:2181 --zk-reg-path /registry/org-apache-slider/h4 ; ",
-              "state" : "3",
-              "role" : "HBASE_THRIFT",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "4"
-            }
-          },
-          "completedContainers" : { }
-        },
-        "HBASE_THRIFT2" : {
-          "componentName" : "HBASE_THRIFT2",
-          "instanceCount" : 1,
-          "activeContainers" : {
-            "container_1409333994422_0005_01_000006" : {
-              "released" : "false",
-              "startTime" : "1409348511727",
-              "createTime" : "1409348511700",
-              "environment" : "[AGENT_WORK_ROOT=\"$PWD\", HADOOP_USER_NAME=\"yarn\", AGENT_LOG_ROOT=\"$LOG_DIRS\", PYTHONPATH=\"./infra/agent/slider-agent/\", SLIDER_PASSPHRASE=\"DEV\"]",
-              "host" : "с6402.ambari.apache.org",
-              "name" : "container_1409333994422_0005_01_000006",
-              "command" : "python ./infra/agent/slider-agent/agent/main.py --label container_1409333994422_0005_01_000006___HBASE_THRIFT2 --zk-quorum с6401.ambari.apache.org:2181 --zk-reg-path /registry/org-apache-slider/h4 ; ",
-              "state" : "3",
-              "role" : "HBASE_THRIFT2",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "5"
-            }
-          },
-          "completedContainers" : { }
-        },
-        "slider-appmaster" : {
-          "componentName" : "slider-appmaster",
-          "instanceCount" : 1,
-          "activeContainers" : {
-            "container_1409333994422_0005_01_000001" : {
-              "released" : "false",
-              "startTime" : "0",
-              "createTime" : "0",
-              "host" : "с6403.ambari.apache.org",
-              "name" : "container_1409333994422_0005_01_000001",
-              "command" : "",
-              "state" : "3",
-              "role" : "slider-appmaster",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "0"
-            }
-          },
-          "completedContainers" : { }
-        }
-      },
-      "configs" : {
-        "componentinstancedata" : {
-          "container_1409333994422_0005_01_000002.app.jmx" : "с6402.ambari.apache.org:52349/jmx",
-          "container_1409333994422_0005_01_000002.app.monitor" : "с6402.ambari.apache.org:52349/master-status"
-        },
-        "core-site" : {
-          "fs.defaultFS" : "hdfs://с6401.ambari.apache.org:8020",
-          "fs.trash.interval" : "360",
-          "hadoop.proxyuser.falcon.groups" : "users",
-          "hadoop.proxyuser.falcon.hosts" : "*",
-          "hadoop.proxyuser.hcat.groups" : "users",
-          "hadoop.proxyuser.hcat.hosts" : "с6402.ambari.apache.org",
-          "hadoop.proxyuser.hive.groups" : "users",
-          "hadoop.proxyuser.hive.hosts" : "с6402.ambari.apache.org",
-          "hadoop.proxyuser.oozie.groups" : "users",
-          "hadoop.proxyuser.oozie.hosts" : "с6402.ambari.apache.org",
-          "hadoop.security.auth_to_local" : "\n        RULE:[2:$1@$0]([rn]m@.*)s/.*/yarn/\n        RULE:[2:$1@$0](jhs@.*)s/.*/mapred/\n        RULE:[2:$1@$0]([nd]n@.*)s/.*/hdfs/\n        RULE:[2:$1@$0](hm@.*)s/.*/hbase/\n        RULE:[2:$1@$0](rs@.*)s/.*/hbase/\n        DEFAULT",
-          "hadoop.security.authentication" : "simple",
-          "hadoop.security.authorization" : "false",
-          "io.compression.codecs" : "org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec",
-          "io.file.buffer.size" : "131072",
-          "io.serializations" : "org.apache.hadoop.io.serializer.WritableSerialization",
-          "ipc.client.connect.max.retries" : "50",
-          "ipc.client.connection.maxidletime" : "30000",
-          "ipc.client.idlethreshold" : "8000",
-          "mapreduce.jobtracker.webinterface.trusted" : "false"
-        },
-        "global" : {
-          "app_container_id" : "container_1409333994422_0005_01_000002",
-          "app_input_conf_dir" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1409333994422_0005/container_1409333994422_0005_01_000002/propagatedconf",
-          "app_install_dir" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1409333994422_0005/container_1409333994422_0005_01_000002/app/install",
-          "app_log_dir" : "/hadoop/yarn/log/application_1409333994422_0005/container_1409333994422_0005_01_000002",
-          "app_pid_dir" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1409333994422_0005/container_1409333994422_0005_01_000002/app/run",
-          "app_root" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1409333994422_0005/container_1409333994422_0005_01_000002/app/install/hbase-0.98.4-hadoop2",
-          "app_user" : "yarn",
-          "ganglia_server_host" : "с6401.ambari.apache.org",
-          "ganglia_server_id" : "Application1",
-          "ganglia_server_port" : "8667",
-          "hbase_instance_name" : "instancename",
-          "hbase_rest_port" : "49728",
-          "hbase_root_password" : "secret",
-          "hbase_thrift2_port" : "59165",
-          "hbase_thrift_port" : "53679",
-          "monitor_protocol" : "http",
-          "security_enabled" : "false",
-          "user_group" : "hadoop"
-        },
-        "hbase-env" : {
-          "content" : "# Set environment variables here.\n\n# The java implementation to use. Java 1.6 required.\nexport JAVA_HOME={{java64_home}}\n\n# HBase Configuration directory\nexport HBASE_CONF_DIR=${HBASE_CONF_DIR:-{{conf_dir}}}\n\n# Extra Java CLASSPATH elements. Optional.\nexport HBASE_CLASSPATH=${HBASE_CLASSPATH}\n\n# The maximum amount of heap to use, in MB. Default is 1000.\n# export HBASE_HEAPSIZE=1000\n\n# Extra Java runtime options.\n# Below are what we set by default. May only work with SUN JVM.\n# For more on why as well as other possible settings,\n# see http://wiki.apache.org/hadoop/PerformanceTuning\nexport HBASE_OPTS=\"-XX:+UseConcMarkSweepGC -XX:ErrorFile={{log_dir}}/hs_err_pid%p.log\"\nexport SERVER_GC_OPTS=\"-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:{{log_dir}}/gc.log-`date +'%Y%m%d%H%M'`\"\n# Uncomment below to enable java garbage collection logging.\n# export HBASE_OPTS=\"$HBASE_OPTS -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStam
 ps -Xloggc:$HBASE_HOME/logs/gc-hbase.log\"\n\n# Uncomment and adjust to enable JMX exporting\n# See jmxremote.password and jmxremote.access in $JRE_HOME/lib/management to configure remote password access.\n# More details at: http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html\n#\n# export HBASE_JMX_BASE=\"-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false\"\nexport HBASE_MASTER_OPTS=\"-Xmx{{master_heapsize}}\"\nexport HBASE_REGIONSERVER_OPTS=\"-Xmn{{regionserver_xmn_size}} -XX:CMSInitiatingOccupancyFraction=70  -Xms{{regionserver_heapsize}} -Xmx{{regionserver_heapsize}}\"\n# export HBASE_THRIFT_OPTS=\"$HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10103\"\n# export HBASE_ZOOKEEPER_OPTS=\"$HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10104\"\n\n# File naming hosts on which HRegionServers will run. $HBASE_HOME/conf/regionservers by default.\nexport HBASE_REGIONSERVERS=${HBASE_CONF_DIR}/regionservers\n\n# Extra ssh
  options. Empty by default.\n# export HBASE_SSH_OPTS=\"-o ConnectTimeout=1 -o SendEnv=HBASE_CONF_DIR\"\n\n# Where log files are stored. $HBASE_HOME/logs by default.\nexport HBASE_LOG_DIR={{log_dir}}\n\n# A string representing this instance of hbase. $USER by default.\n# export HBASE_IDENT_STRING=$USER\n\n# The scheduling priority for daemon processes. See 'man nice'.\n# export HBASE_NICENESS=10\n\n# The directory where pid files are stored. /tmp by default.\nexport HBASE_PID_DIR={{pid_dir}}\n\n# Seconds to sleep between slave commands. Unset by default. This\n# can be useful in large clusters, where, e.g., slave rsyncs can\n# otherwise arrive faster than the master can service them.\n# export HBASE_SLAVE_SLEEP=0.1\n\n# Tell HBase whether it should manage it's own instance of Zookeeper or not.\nexport HBASE_MANAGES_ZK=false\n\n{% if security_enabled %}\nexport HBASE_OPTS=\"$HBASE_OPTS -Djava.security.auth.login.config={{client_jaas_config_file}}\"\nexport HBASE_MASTER_OPTS=\"$HBASE_M
 ASTER_OPTS -Djava.security.auth.login.config={{master_jaas_config_file}}\"\nexport HBASE_REGIONSERVER_OPTS=\"$HBASE_REGIONSERVER_OPTS -Djava.security.auth.login.config={{regionserver_jaas_config_file}}\"\n{% endif %}",
-          "hbase_master_heapsize" : "1024m",
-          "hbase_regionserver_heapsize" : "1024m",
-          "hbase_regionserver_xmn_max" : "512",
-          "hbase_regionserver_xmn_ratio" : "0.2"
-        },
-        "hbase-log4j" : {
-          "content" : "# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership.  The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License.  You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\n# Define some default values that can be overridden by system properties\nhbase.root.logger=INFO,console\nhbase.security.logger=INFO,console\nhbase.log.dir=.\nhbase.lo
 g.file=hbase.log\n\n# Define the root logger to the system property \"hbase.root.logger\".\nlog4j.rootLogger=${hbase.root.logger}\n\n# Logging Threshold\nlog4j.threshold=ALL\n\n#\n# Daily Rolling File Appender\n#\nlog4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender\nlog4j.appender.DRFA.File=${hbase.log.dir}/${hbase.log.file}\n\n# Rollver at midnight\nlog4j.appender.DRFA.DatePattern=.yyyy-MM-dd\n\n# 30-day backup\n#log4j.appender.DRFA.MaxBackupIndex=30\nlog4j.appender.DRFA.layout=org.apache.log4j.PatternLayout\n\n# Pattern format: Date LogLevel LoggerName LogMessage\nlog4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %m%n\n\n# Rolling File Appender properties\nhbase.log.maxfilesize=256MB\nhbase.log.maxbackupindex=20\n\n# Rolling File Appender\nlog4j.appender.RFA=org.apache.log4j.RollingFileAppender\nlog4j.appender.RFA.File=${hbase.log.dir}/${hbase.log.file}\n\nlog4j.appender.RFA.MaxFileSize=${hbase.log.maxfilesize}\nlog4j.appender.RFA.MaxBackupIndex=$
 {hbase.log.maxbackupindex}\n\nlog4j.appender.RFA.layout=org.apache.log4j.PatternLayout\nlog4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %m%n\n\n#\n# Security audit appender\n#\nhbase.security.log.file=SecurityAuth.audit\nhbase.security.log.maxfilesize=256MB\nhbase.security.log.maxbackupindex=20\nlog4j.appender.RFAS=org.apache.log4j.RollingFileAppender\nlog4j.appender.RFAS.File=${hbase.log.dir}/${hbase.security.log.file}\nlog4j.appender.RFAS.MaxFileSize=${hbase.security.log.maxfilesize}\nlog4j.appender.RFAS.MaxBackupIndex=${hbase.security.log.maxbackupindex}\nlog4j.appender.RFAS.layout=org.apache.log4j.PatternLayout\nlog4j.appender.RFAS.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n\nlog4j.category.SecurityLogger=${hbase.security.logger}\nlog4j.additivity.SecurityLogger=false\n#log4j.logger.SecurityLogger.org.apache.hadoop.hbase.security.access.AccessController=TRACE\n\n#\n# Null Appender\n#\nlog4j.appender.NullAppender=org.apache.log4j.varia.NullAppender\n
 \n#\n# console\n# Add \"console\" to rootlogger above if you want to use this\n#\nlog4j.appender.console=org.apache.log4j.ConsoleAppender\nlog4j.appender.console.target=System.err\nlog4j.appender.console.layout=org.apache.log4j.PatternLayout\nlog4j.appender.console.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %m%n\n\n# Custom Logging levels\n\nlog4j.logger.org.apache.zookeeper=INFO\n#log4j.logger.org.apache.hadoop.fs.FSNamesystem=DEBUG\nlog4j.logger.org.apache.hadoop.hbase=DEBUG\n# Make these two classes INFO-level. Make them DEBUG to see more zk debug.\nlog4j.logger.org.apache.hadoop.hbase.zookeeper.ZKUtil=INFO\nlog4j.logger.org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher=INFO\n#log4j.logger.org.apache.hadoop.dfs=DEBUG\n# Set this class to log INFO only otherwise its OTT\n# Enable this to get detailed connection error/retry logging.\n# log4j.logger.org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation=TRACE\n\n\n# Uncomment this line to enable trac
 ing on _every_ RPC call (this can be a lot of output)\n#log4j.logger.org.apache.hadoop.ipc.HBaseServer.trace=DEBUG\n\n# Uncomment the below if you want to remove logging of client region caching'\n# and scan of .META. messages\n# log4j.logger.org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation=INFO\n# log4j.logger.org.apache.hadoop.hbase.client.MetaScanner=INFO"
-        },
-        "hbase-policy" : {
-          "security.admin.protocol.acl" : "*",
-          "security.client.protocol.acl" : "*",
-          "security.masterregion.protocol.acl" : "*"
-        },
-        "hbase-site" : {
-          "dfs.domain.socket.path" : "/var/lib/hadoop-hdfs/dn_socket",
-          "hbase.client.keyvalue.maxsize" : "10485760",
-          "hbase.client.scanner.caching" : "100",
-          "hbase.cluster.distributed" : "true",
-          "hbase.defaults.for.version.skip" : "true",
-          "hbase.hregion.majorcompaction" : "86400000",
-          "hbase.hregion.max.filesize" : "10737418240",
-          "hbase.hregion.memstore.block.multiplier" : "2",
-          "hbase.hregion.memstore.flush.size" : "134217728",
-          "hbase.hregion.memstore.mslab.enabled" : "true",
-          "hbase.hstore.blockingStoreFiles" : "10",
-          "hbase.hstore.compactionThreshold" : "3",
-          "hbase.hstore.flush.retries.number" : "120",
-          "hbase.local.dir" : "${hbase.tmp.dir}/local",
-          "hbase.master.info.bindAddress" : "0.0.0.0",
-          "hbase.master.info.port" : "52349",
-          "hbase.master.kerberos.principal" : "hbase/_HOST@EXAMPLE.COM",
-          "hbase.master.keytab.file" : "/etc/security/keytabs/hbase.service.keytab",
-          "hbase.master.port" : "60000",
-          "hbase.regionserver.global.memstore.lowerLimit" : "0.38",
-          "hbase.regionserver.global.memstore.upperLimit" : "0.4",
-          "hbase.regionserver.handler.count" : "60",
-          "hbase.regionserver.info.port" : "0",
-          "hbase.regionserver.kerberos.principal" : "hbase/_HOST@EXAMPLE.COM",
-          "hbase.regionserver.keytab.file" : "/etc/security/keytabs/hbase.service.keytab",
-          "hbase.regionserver.port" : "0",
-          "hbase.rootdir" : "hdfs://с6401.ambari.apache.org:8020/user/yarn/.slider/cluster/h4/database/data",
-          "hbase.security.authentication" : "simple",
-          "hbase.security.authorization" : "false",
-          "hbase.stagingdir" : "hdfs://с6401.ambari.apache.org:8020/user/yarn/.slider/cluster/h4/database/staging",
-          "hbase.superuser" : "yarn",
-          "hbase.tmp.dir" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1409333994422_0005/container_1409333994422_0005_01_000002/work/app/tmp",
-          "hbase.zookeeper.property.clientPort" : "2181",
-          "hbase.zookeeper.quorum" : "с6401.ambari.apache.org",
-          "hbase.zookeeper.useMulti" : "true",
-          "hfile.block.cache.size" : "0.40",
-          "zookeeper.session.timeout" : "30000",
-          "zookeeper.znode.parent" : "/services/slider/users/yarn/h4"
-        },
-        "hdfs-site" : {
-          "dfs.block.access.token.enable" : "true",
-          "dfs.blockreport.initialDelay" : "120",
-          "dfs.blocksize" : "134217728",
-          "dfs.client.read.shortcircuit" : "true",
-          "dfs.client.read.shortcircuit.streams.cache.size" : "4096",
-          "dfs.cluster.administrators" : " hdfs",
-          "dfs.datanode.address" : "0.0.0.0:50010",
-          "dfs.datanode.balance.bandwidthPerSec" : "6250000",
-          "dfs.datanode.data.dir" : "/hadoop/hdfs/data",
-          "dfs.datanode.data.dir.perm" : "750",
-          "dfs.datanode.du.reserved" : "1073741824",
-          "dfs.datanode.failed.volumes.tolerated" : "0",
-          "dfs.datanode.http.address" : "0.0.0.0:50075",
-          "dfs.datanode.ipc.address" : "0.0.0.0:8010",
-          "dfs.datanode.kerberos.principal" : "dn/_HOST@EXAMPLE.COM",
-          "dfs.datanode.keytab.file" : "/etc/security/keytabs/dn.service.keytab",
-          "dfs.datanode.max.transfer.threads" : "1024",
-          "dfs.domain.socket.path" : "/var/lib/hadoop-hdfs/dn_socket",
-          "dfs.heartbeat.interval" : "3",
-          "dfs.hosts.exclude" : "/etc/hadoop/conf/dfs.exclude",
-          "dfs.https.port" : "50470",
-          "dfs.journalnode.edits.dir" : "/grid/0/hdfs/journal",
-          "dfs.journalnode.http-address" : "0.0.0.0:8480",
-          "dfs.namenode.accesstime.precision" : "0",
-          "dfs.namenode.avoid.read.stale.datanode" : "true",
-          "dfs.namenode.avoid.write.stale.datanode" : "true",
-          "dfs.namenode.checkpoint.dir" : "/hadoop/hdfs/namesecondary",
-          "dfs.namenode.checkpoint.edits.dir" : "/hadoop/hdfs/namesecondary",
-          "dfs.namenode.checkpoint.period" : "21600",
-          "dfs.namenode.checkpoint.txns" : "1000000",
-          "dfs.namenode.handler.count" : "40",
-          "dfs.namenode.http-address" : "с6401.ambari.apache.org:50070",
-          "dfs.namenode.https-address" : "с6401.ambari.apache.org:50470",
-          "dfs.namenode.kerberos.https.principal" : "HTTP/_HOST@EXAMPLE.COM",
-          "dfs.namenode.kerberos.principal" : "nn/_HOST@EXAMPLE.COM",
-          "dfs.namenode.keytab.file" : "/etc/security/keytabs/nn.service.keytab",
-          "dfs.namenode.name.dir" : "/hadoop/hdfs/namenode",
-          "dfs.namenode.name.dir.restore" : "true",
-          "dfs.namenode.safemode.threshold-pct" : "1.0f",
-          "dfs.namenode.secondary.http-address" : "с6402.ambari.apache.org:50090",
-          "dfs.namenode.stale.datanode.interval" : "30000",
-          "dfs.namenode.write.stale.datanode.ratio" : "1.0f",
-          "dfs.permissions.enabled" : "true",
-          "dfs.permissions.superusergroup" : "hdfs",
-          "dfs.replication" : "3",
-          "dfs.replication.max" : "50",
-          "dfs.secondary.namenode.kerberos.https.principal" : "HTTP/_HOST@EXAMPLE.COM",
-          "dfs.secondary.namenode.kerberos.principal" : "nn/_HOST@EXAMPLE.COM",
-          "dfs.secondary.namenode.keytab.file" : "/etc/security/keytabs/nn.service.keytab",
-          "dfs.support.append" : "true",
-          "dfs.web.authentication.kerberos.keytab" : "/etc/security/keytabs/spnego.service.keytab",
-          "dfs.web.authentication.kerberos.principal" : "HTTP/_HOST@EXAMPLE.COM",
-          "dfs.webhdfs.enabled" : "true",
-          "fs.permissions.umask-mode" : "022"
-        },
-        "logfolders" : {
-          "с6401.ambari.apache.org-container_1409333994422_0005_01_000004-AGENT_LOG_ROOT" : "/hadoop/yarn/log/application_1409333994422_0005/container_1409333994422_0005_01_000004",
-          "с6401.ambari.apache.org-container_1409333994422_0005_01_000004-AGENT_WORK_ROOT" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1409333994422_0005/container_1409333994422_0005_01_000004",
-          "с6402.ambari.apache.org-container_1409333994422_0005_01_000002-AGENT_LOG_ROOT" : "/hadoop/yarn/log/application_1409333994422_0005/container_1409333994422_0005_01_000002",
-          "с6402.ambari.apache.org-container_1409333994422_0005_01_000002-AGENT_WORK_ROOT" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1409333994422_0005/container_1409333994422_0005_01_000002",
-          "с6402.ambari.apache.org-container_1409333994422_0005_01_000006-AGENT_LOG_ROOT" : "/hadoop/yarn/log/application_1409333994422_0005/container_1409333994422_0005_01_000006",
-          "с6402.ambari.apache.org-container_1409333994422_0005_01_000006-AGENT_WORK_ROOT" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1409333994422_0005/container_1409333994422_0005_01_000006",
-          "с6403.ambari.apache.org-container_1409333994422_0005_01_000003-AGENT_LOG_ROOT" : "/hadoop/yarn/log/application_1409333994422_0005/container_1409333994422_0005_01_000003",
-          "с6403.ambari.apache.org-container_1409333994422_0005_01_000003-AGENT_WORK_ROOT" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1409333994422_0005/container_1409333994422_0005_01_000003",
-          "с6404.ambari.apache.org-container_1409333994422_0005_01_000005-AGENT_LOG_ROOT" : "/hadoop/yarn/log/application_1409333994422_0005/container_1409333994422_0005_01_000005",
-          "с6404.ambari.apache.org-container_1409333994422_0005_01_000005-AGENT_WORK_ROOT" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1409333994422_0005/container_1409333994422_0005_01_000005"
-        },
-        "yarn-site" : {
-          "yarn.acl.enable" : "false",
-          "yarn.application.classpath" : "/etc/hadoop/conf,/usr/lib/hadoop/*,/usr/lib/hadoop/lib/*,/usr/lib/hadoop-hdfs/*,/usr/lib/hadoop-hdfs/lib/*,/usr/lib/hadoop-yarn/*,/usr/lib/hadoop-yarn/lib/*,/usr/lib/hadoop-mapreduce/*,/usr/lib/hadoop-mapreduce/lib/*",
-          "yarn.log-aggregation-enable" : "true",
-          "yarn.log-aggregation.retain-seconds" : "2592000",
-          "yarn.log.server.url" : "http://с6402.ambari.apache.org:19888/jobhistory/logs",
-          "yarn.nodemanager.address" : "0.0.0.0:45454",
-          "yarn.nodemanager.admin-env" : "MALLOC_ARENA_MAX=$MALLOC_ARENA_MAX",
-          "yarn.nodemanager.aux-services" : "mapreduce_shuffle",
-          "yarn.nodemanager.aux-services.mapreduce_shuffle.class" : "org.apache.hadoop.mapred.ShuffleHandler",
-          "yarn.nodemanager.container-executor.class" : "org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor",
-          "yarn.nodemanager.container-monitor.interval-ms" : "3000",
-          "yarn.nodemanager.delete.debug-delay-sec" : "0",
-          "yarn.nodemanager.disk-health-checker.min-healthy-disks" : "0.25",
-          "yarn.nodemanager.health-checker.interval-ms" : "135000",
-          "yarn.nodemanager.health-checker.script.timeout-ms" : "60000",
-          "yarn.nodemanager.linux-container-executor.group" : "hadoop",
-          "yarn.nodemanager.local-dirs" : "/hadoop/yarn/local",
-          "yarn.nodemanager.log-aggregation.compression-type" : "gz",
-          "yarn.nodemanager.log-dirs" : "/hadoop/yarn/log",
-          "yarn.nodemanager.log.retain-second" : "604800",
-          "yarn.nodemanager.remote-app-log-dir" : "/app-logs",
-          "yarn.nodemanager.remote-app-log-dir-suffix" : "logs",
-          "yarn.nodemanager.resource.memory-mb" : "2046",
-          "yarn.nodemanager.vmem-check-enabled" : "false",
-          "yarn.nodemanager.vmem-pmem-ratio" : "2.1",
-          "yarn.resourcemanager.address" : "с6402.ambari.apache.org:8050",
-          "yarn.resourcemanager.admin.address" : "с6402.ambari.apache.org:8141",
-          "yarn.resourcemanager.am.max-attempts" : "2",
-          "yarn.resourcemanager.hostname" : "с6402.ambari.apache.org",
-          "yarn.resourcemanager.nodes.exclude-path" : "/etc/hadoop/conf/yarn.exclude",
-          "yarn.resourcemanager.resource-tracker.address" : "с6402.ambari.apache.org:8025",
-          "yarn.resourcemanager.scheduler.address" : "с6402.ambari.apache.org:8030",
-          "yarn.resourcemanager.scheduler.class" : "org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler",
-          "yarn.resourcemanager.webapp.address" : "с6402.ambari.apache.org:8088",
-          "yarn.scheduler.maximum-allocation-mb" : "2046",
-          "yarn.scheduler.minimum-allocation-mb" : "682",
-          "yarn.timeline-service.address" : "с6402.ambari.apache.org:10200",
-          "yarn.timeline-service.enabled" : "true",
-          "yarn.timeline-service.generic-application-history.store-class" : "org.apache.hadoop.yarn.server.applicationhistoryservice.NullApplicationHistoryStore",
-          "yarn.timeline-service.leveldb-timeline-store.path" : "/hadoop/yarn/timeline",
-          "yarn.timeline-service.leveldb-timeline-store.ttl-interval-ms" : "300000",
-          "yarn.timeline-service.store-class" : "org.apache.hadoop.yarn.server.timeline.LeveldbTimelineStore",
-          "yarn.timeline-service.ttl-enable" : "true",
-          "yarn.timeline-service.ttl-ms" : "2678400000",
-          "yarn.timeline-service.webapp.address" : "с6402.ambari.apache.org:8188",
-          "yarn.timeline-service.webapp.https.address" : "с6402.ambari.apache.org:8190"
-        }
-      },
-      "jmx" : {
-        "ClusterId" : "d34a2f54-f73a-4166-87f4-501b465ac25b",
-        "ClusterRequests" : "2241",
-        "DeadRegionServers" : "0",
-        "IsActiveMaster" : "true",
-        "MasterActiveTime" : "1409348614409",
-        "MasterStartTime" : "1409348612516",
-        "MetricAverageLoad" : "2.0",
-        "RegionServers" : "1",
-        "ServerName" : "с6402.ambari.apache.org,60000,1409348607747",
-        "ZookeeperQuorum" : "с6401.ambari.apache.org:2181"
-      },
-      "urls" : {
-        "JMX" : "http://с6402.ambari.apache.org:52349/jmx",
-        "UI" : "http://с6402.ambari.apache.org:52349/master-status",
-        "app.ganglia" : "http://с6401.ambari.apache.org/ganglia?c=Application1",
-        "app.metrics" : "http://с6401.ambari.apache.org/cgi-bin/rrd.py?c=Application1",
-        "org.apache.slider.hbase.rest" : "http://с6401.ambari.apache.org:49728",
-        "org.apache.slider.hbase.thrift" : "http://с6404.ambari.apache.org:53679",
-        "org.apache.slider.hbase.thrift2" : "http://с6402.ambari.apache.org:59165"
-      }
-    },
-    {
-      "href" : "http://c6401:8080/api/v1/views/SLIDER/versions/1.0.0/instances/SLIDER_1/apps/1409333994422_9",
-      "appVersion" : "0.98.4-hadoop2",
-      "description" : "apache hbase is the hadoop database, a distributed, scalable, big data store....",
-      "diagnostics" : "",
-      "endTime" : 0,
-      "id" : "1409333994422_9",
-      "instance_name" : "SLIDER_1",
-      "metrics" : null,
-      "name" : "h10",
-      "startTime" : 1409359943615,
-      "state" : "RUNNING",
-      "type" : "hbase",
-      "user" : "yarn",
-      "version" : "1.0.0",
-      "view_name" : "SLIDER",
-      "yarnId" : "application_1409333994422_0009",
-      "alerts" : {
-        "detail" : [
-          {
-            "description" : "alert1",
-            "host_name" : "с6402.ambari.apache.org",
-            "last_status" : "CRITICAL",
-            "last_status_time" : 1409689349,
-            "service_name" : "HBASE",
-            "status" : "OK",
-            "status_time" : 1409703869,
-            "output" : "Connection refused",
-            "actual_status" : "CRITICAL"
-          },
-          {
-            "description" : "alert2",
-            "host_name" : "с6402.ambari.apache.org",
-            "last_status" : "OK",
-            "last_status_time" : 1409334745,
-            "service_name" : "HBASE",
-            "status" : "WARNING",
-            "status_time" : 1409703865,
-            "output" : "TCP OK - 0.001 second response time on port 9083",
-            "actual_status" : "OK"
-          },
-          {
-            "description" : "NameNode edit logs directory status on dev01.hortonworks.com",
-            "host_name" : "dev01.hortonworks.com",
-            "last_status" : "WARNING",
-            "last_status_time" : 1389788011,
-            "service_name" : "HBASE",
-            "status" : "CRITICAL",
-            "status_time" : 1389793171,
-            "output" : "WARNING: NameNode directory status not available via http://dev01.hortonworks.com:50070/jmx url, code 0"
-          },
-          {
-            "description" : "NameNode host CPU utilization on dev01.hortonworks.com",
-            "host_name" : "dev01.hortonworks.com",
-            "last_status" : "OK",
-            "last_status_time" : 1389636534,
-            "service_name" : "HBASE",
-            "status" : "PASSIVE",
-            "status_time" : 1389793060,
-            "output" : "1 CPU, load 19.0% &lt; 200% : OK"
-          },
-          {
-            "description" : "App Timeline Server Web UI",
-            "host_name" : "dev01.hortonworks.com",
-            "last_status" : "WARNING",
-            "last_status_time" : 1389636534,
-            "service_name" : "HBASE",
-            "status" : "UNKNOWN",
-            "status_time" : 1389793060,
-            "output" : "1 CPU, load 19.0% &lt; 200% : OK"
-          }
-        ],
-        "summary" : {
-          "CRITICAL" : 1,
-          "OK" : 1,
-          "PASSIVE" : 0,
-          "WARNING" : 0
-        }
-      },
-      "components" : {
-        "HBASE_MASTER" : {
-          "componentName" : "HBASE_MASTER",
-          "instanceCount" : 1,
-          "activeContainers" : {
-            "container_1409333994422_0009_01_000002" : {
-              "released" : "false",
-              "startTime" : "1409359961882",
-              "createTime" : "1409359961649",
-              "environment" : "[AGENT_WORK_ROOT=\"$PWD\", HADOOP_USER_NAME=\"yarn\", AGENT_LOG_ROOT=\"$LOG_DIRS\", PYTHONPATH=\"./infra/agent/slider-agent/\", SLIDER_PASSPHRASE=\"DEV\", MALLOC_ARENA_MAX=\"4\"]",
-              "host" : "с6403.ambari.apache.org",
-              "name" : "container_1409333994422_0009_01_000002",
-              "command" : "python ./infra/agent/slider-agent/agent/main.py --label container_1409333994422_0009_01_000002___HBASE_MASTER --zk-quorum с6403.ambari.apache.org:2181,с6401.ambari.apache.org:2181,с6402.ambari.apache.org:2181 --zk-reg-path /registry/org-apache-slider/h10 ; ",
-              "state" : "3",
-              "role" : "HBASE_MASTER",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "1"
-            }
-          },
-          "completedContainers" : { }
-        },
-        "HBASE_REGIONSERVER" : {
-          "componentName" : "HBASE_REGIONSERVER",
-          "instanceCount" : 1,
-          "activeContainers" : {
-            "container_1409333994422_0009_01_000003" : {
-              "released" : "false",
-              "startTime" : "1409359962422",
-              "createTime" : "1409359961566",
-              "environment" : "[AGENT_WORK_ROOT=\"$PWD\", HADOOP_USER_NAME=\"yarn\", AGENT_LOG_ROOT=\"$LOG_DIRS\", PYTHONPATH=\"./infra/agent/slider-agent/\", SLIDER_PASSPHRASE=\"DEV\", MALLOC_ARENA_MAX=\"4\"]",
-              "host" : "с6404.ambari.apache.org",
-              "name" : "container_1409333994422_0009_01_000003",
-              "command" : "python ./infra/agent/slider-agent/agent/main.py --label container_1409333994422_0009_01_000003___HBASE_REGIONSERVER --zk-quorum с6403.ambari.apache.org:2181,с6401.ambari.apache.org:2181,с6402.ambari.apache.org:2181 --zk-reg-path /registry/org-apache-slider/h10 ; ",
-              "state" : "3",
-              "role" : "HBASE_REGIONSERVER",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "2"
-            }
-          },
-          "completedContainers" : { }
-        },
-        "slider-appmaster" : {
-          "componentName" : "slider-appmaster",
-          "instanceCount" : 1,
-          "activeContainers" : {
-            "container_1409333994422_0009_01_000001" : {
-              "released" : "false",
-              "startTime" : "0",
-              "createTime" : "0",
-              "host" : "с6404.ambari.apache.org",
-              "name" : "container_1409333994422_0009_01_000001",
-              "command" : "",
-              "state" : "3",
-              "role" : "slider-appmaster",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "0"
-            }
-          },
-          "completedContainers" : { }
-        }
-      },
-      "configs" : {
-        "componentinstancedata" : {
-          "container_1409333994422_0009_01_000002.app.jmx" : "с6403.ambari.apache.org:33940/jmx",
-          "container_1409333994422_0009_01_000002.app.monitor" : "с6403.ambari.apache.org:33940/master-status"
-        },
-        "core-site" : {
-          "fs.defaultFS" : "hdfs://с6401.ambari.apache.org:8020",
-          "fs.trash.interval" : "360",
-          "hadoop.proxyuser.falcon.groups" : "users",
-          "hadoop.proxyuser.falcon.hosts" : "*",
-          "hadoop.proxyuser.hcat.groups" : "users",
-          "hadoop.proxyuser.hcat.hosts" : "с6402.ambari.apache.org",
-          "hadoop.proxyuser.hive.groups" : "users",
-          "hadoop.proxyuser.hive.hosts" : "с6402.ambari.apache.org",
-          "hadoop.proxyuser.oozie.groups" : "users",
-          "hadoop.proxyuser.oozie.hosts" : "с6402.ambari.apache.org",
-          "hadoop.security.auth_to_local" : "\n        RULE:[2:$1@$0]([rn]m@.*)s/.*/yarn/\n        RULE:[2:$1@$0](jhs@.*)s/.*/mapred/\n        RULE:[2:$1@$0]([nd]n@.*)s/.*/hdfs/\n        RULE:[2:$1@$0](hm@.*)s/.*/hbase/\n        RULE:[2:$1@$0](rs@.*)s/.*/hbase/\n        DEFAULT",
-          "hadoop.security.authentication" : "simple",
-          "hadoop.security.authorization" : "false",
-          "io.compression.codecs" : "org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec",
-          "io.file.buffer.size" : "131072",
-          "io.serializations" : "org.apache.hadoop.io.serializer.WritableSerialization",
-          "ipc.client.connect.max.retries" : "50",
-          "ipc.client.connection.maxidletime" : "30000",
-          "ipc.client.idlethreshold" : "8000",
-          "mapreduce.jobtracker.webinterface.trusted" : "false"
-        },
-        "global" : {
-          "app_container_id" : "container_1409333994422_0009_01_000002",
-          "app_input_conf_dir" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1409333994422_0009/container_1409333994422_0009_01_000002/propagatedconf",
-          "app_install_dir" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1409333994422_0009/container_1409333994422_0009_01_000002/app/install",
-          "app_log_dir" : "/hadoop/yarn/log/application_1409333994422_0009/container_1409333994422_0009_01_000002",
-          "app_pid_dir" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1409333994422_0009/container_1409333994422_0009_01_000002/app/run",
-          "app_root" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1409333994422_0009/container_1409333994422_0009_01_000002/app/install/hbase-0.98.4-hadoop2",
-          "app_user" : "yarn",
-          "ganglia_server_host" : "с6402.ambari.apache.org",
-          "ganglia_server_id" : "Application1",
-          "ganglia_server_port" : "8667",
-          "hbase_instance_name" : "instancename",
-          "hbase_rest_port" : "0",
-          "hbase_root_password" : "secret",
-          "hbase_thrift2_port" : "0",
-          "hbase_thrift_port" : "0",
-          "monitor_protocol" : "http",
-          "security_enabled" : "false",
-          "user_group" : "hadoop"
-        },
-        "hbase-env" : {
-          "content" : "# Set environment variables here.\n\n# The java implementation to use. Java 1.6 required.\nexport JAVA_HOME={{java64_home}}\n\n# HBase Configuration directory\nexport HBASE_CONF_DIR=${HBASE_CONF_DIR:-{{conf_dir}}}\n\n# Extra Java CLASSPATH elements. Optional.\nexport HBASE_CLASSPATH=${HBASE_CLASSPATH}\n\n# The maximum amount of heap to use, in MB. Default is 1000.\n# export HBASE_HEAPSIZE=1000\n\n# Extra Java runtime options.\n# Below are what we set by default. May only work with SUN JVM.\n# For more on why as well as other possible settings,\n# see http://wiki.apache.org/hadoop/PerformanceTuning\nexport HBASE_OPTS=\"-XX:+UseConcMarkSweepGC -XX:ErrorFile={{log_dir}}/hs_err_pid%p.log\"\nexport SERVER_GC_OPTS=\"-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:{{log_dir}}/gc.log-`date +'%Y%m%d%H%M'`\"\n# Uncomment below to enable java garbage collection logging.\n# export HBASE_OPTS=\"$HBASE_OPTS -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStam
 ps -Xloggc:$HBASE_HOME/logs/gc-hbase.log\"\n\n# Uncomment and adjust to enable JMX exporting\n# See jmxremote.password and jmxremote.access in $JRE_HOME/lib/management to configure remote password access.\n# More details at: http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html\n#\n# export HBASE_JMX_BASE=\"-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false\"\nexport HBASE_MASTER_OPTS=\"-Xmx{{master_heapsize}}\"\nexport HBASE_REGIONSERVER_OPTS=\"-Xmn{{regionserver_xmn_size}} -XX:CMSInitiatingOccupancyFraction=70  -Xms{{regionserver_heapsize}} -Xmx{{regionserver_heapsize}}\"\n# export HBASE_THRIFT_OPTS=\"$HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10103\"\n# export HBASE_ZOOKEEPER_OPTS=\"$HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10104\"\n\n# File naming hosts on which HRegionServers will run. $HBASE_HOME/conf/regionservers by default.\nexport HBASE_REGIONSERVERS=${HBASE_CONF_DIR}/regionservers\n\n# Extra ssh
  options. Empty by default.\n# export HBASE_SSH_OPTS=\"-o ConnectTimeout=1 -o SendEnv=HBASE_CONF_DIR\"\n\n# Where log files are stored. $HBASE_HOME/logs by default.\nexport HBASE_LOG_DIR={{log_dir}}\n\n# A string representing this instance of hbase. $USER by default.\n# export HBASE_IDENT_STRING=$USER\n\n# The scheduling priority for daemon processes. See 'man nice'.\n# export HBASE_NICENESS=10\n\n# The directory where pid files are stored. /tmp by default.\nexport HBASE_PID_DIR={{pid_dir}}\n\n# Seconds to sleep between slave commands. Unset by default. This\n# can be useful in large clusters, where, e.g., slave rsyncs can\n# otherwise arrive faster than the master can service them.\n# export HBASE_SLAVE_SLEEP=0.1\n\n# Tell HBase whether it should manage it's own instance of Zookeeper or not.\nexport HBASE_MANAGES_ZK=false\n\n{% if security_enabled %}\nexport HBASE_OPTS=\"$HBASE_OPTS -Djava.security.auth.login.config={{client_jaas_config_file}}\"\nexport HBASE_MASTER_OPTS=\"$HBASE_M
 ASTER_OPTS -Djava.security.auth.login.config={{master_jaas_config_file}}\"\nexport HBASE_REGIONSERVER_OPTS=\"$HBASE_REGIONSERVER_OPTS -Djava.security.auth.login.config={{regionserver_jaas_config_file}}\"\n{% endif %}",
-          "hbase_master_heapsize" : "1024m",
-          "hbase_regionserver_heapsize" : "1024m",
-          "hbase_regionserver_xmn_max" : "512",
-          "hbase_regionserver_xmn_ratio" : "0.2"
-        },
-        "hbase-log4j" : {
-          "content" : "# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership.  The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License.  You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\n# Define some default values that can be overridden by system properties\nhbase.root.logger=INFO,console\nhbase.security.logger=INFO,console\nhbase.log.dir=.\nhbase.lo
 g.file=hbase.log\n\n# Define the root logger to the system property \"hbase.root.logger\".\nlog4j.rootLogger=${hbase.root.logger}\n\n# Logging Threshold\nlog4j.threshold=ALL\n\n#\n# Daily Rolling File Appender\n#\nlog4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender\nlog4j.appender.DRFA.File=${hbase.log.dir}/${hbase.log.file}\n\n# Rollver at midnight\nlog4j.appender.DRFA.DatePattern=.yyyy-MM-dd\n\n# 30-day backup\n#log4j.appender.DRFA.MaxBackupIndex=30\nlog4j.appender.DRFA.layout=org.apache.log4j.PatternLayout\n\n# Pattern format: Date LogLevel LoggerName LogMessage\nlog4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %m%n\n\n# Rolling File Appender properties\nhbase.log.maxfilesize=256MB\nhbase.log.maxbackupindex=20\n\n# Rolling File Appender\nlog4j.appender.RFA=org.apache.log4j.RollingFileAppender\nlog4j.appender.RFA.File=${hbase.log.dir}/${hbase.log.file}\n\nlog4j.appender.RFA.MaxFileSize=${hbase.log.maxfilesize}\nlog4j.appender.RFA.MaxBackupIndex=$
 {hbase.log.maxbackupindex}\n\nlog4j.appender.RFA.layout=org.apache.log4j.PatternLayout\nlog4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %m%n\n\n#\n# Security audit appender\n#\nhbase.security.log.file=SecurityAuth.audit\nhbase.security.log.maxfilesize=256MB\nhbase.security.log.maxbackupindex=20\nlog4j.appender.RFAS=org.apache.log4j.RollingFileAppender\nlog4j.appender.RFAS.File=${hbase.log.dir}/${hbase.security.log.file}\nlog4j.appender.RFAS.MaxFileSize=${hbase.security.log.maxfilesize}\nlog4j.appender.RFAS.MaxBackupIndex=${hbase.security.log.maxbackupindex}\nlog4j.appender.RFAS.layout=org.apache.log4j.PatternLayout\nlog4j.appender.RFAS.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n\nlog4j.category.SecurityLogger=${hbase.security.logger}\nlog4j.additivity.SecurityLogger=false\n#log4j.logger.SecurityLogger.org.apache.hadoop.hbase.security.access.AccessController=TRACE\n\n#\n# Null Appender\n#\nlog4j.appender.NullAppender=org.apache.log4j.varia.NullAppender\n
 \n#\n# console\n# Add \"console\" to rootlogger above if you want to use this\n#\nlog4j.appender.console=org.apache.log4j.ConsoleAppender\nlog4j.appender.console.target=System.err\nlog4j.appender.console.layout=org.apache.log4j.PatternLayout\nlog4j.appender.console.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %m%n\n\n# Custom Logging levels\n\nlog4j.logger.org.apache.zookeeper=INFO\n#log4j.logger.org.apache.hadoop.fs.FSNamesystem=DEBUG\nlog4j.logger.org.apache.hadoop.hbase=DEBUG\n# Make these two classes INFO-level. Make them DEBUG to see more zk debug.\nlog4j.logger.org.apache.hadoop.hbase.zookeeper.ZKUtil=INFO\nlog4j.logger.org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher=INFO\n#log4j.logger.org.apache.hadoop.dfs=DEBUG\n# Set this class to log INFO only otherwise its OTT\n# Enable this to get detailed connection error/retry logging.\n# log4j.logger.org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation=TRACE\n\n\n# Uncomment this line to enable trac
 ing on _every_ RPC call (this can be a lot of output)\n#log4j.logger.org.apache.hadoop.ipc.HBaseServer.trace=DEBUG\n\n# Uncomment the below if you want to remove logging of client region caching'\n# and scan of .META. messages\n# log4j.logger.org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation=INFO\n# log4j.logger.org.apache.hadoop.hbase.client.MetaScanner=INFO"
-        },
-        "hbase-policy" : {
-          "security.admin.protocol.acl" : "*",
-          "security.client.protocol.acl" : "*",
-          "security.masterregion.protocol.acl" : "*"
-        },
-        "hbase-site" : {
-          "dfs.domain.socket.path" : "/var/lib/hadoop-hdfs/dn_socket",
-          "hbase.client.keyvalue.maxsize" : "10485760",
-          "hbase.client.scanner.caching" : "100",
-          "hbase.cluster.distributed" : "true",
-          "hbase.defaults.for.version.skip" : "true",
-          "hbase.hregion.majorcompaction" : "86400000",
-          "hbase.hregion.max.filesize" : "10737418240",
-          "hbase.hregion.memstore.block.multiplier" : "2",
-          "hbase.hregion.memstore.flush.size" : "134217728",
-          "hbase.hregion.memstore.mslab.enabled" : "true",
-          "hbase.hstore.blockingStoreFiles" : "10",
-          "hbase.hstore.compactionThreshold" : "3",
-          "hbase.hstore.flush.retries.number" : "120",
-          "hbase.local.dir" : "${hbase.tmp.dir}/local",
-          "hbase.master.info.bindAddress" : "0.0.0.0",
-          "hbase.master.info.port" : "33940",
-          "hbase.master.kerberos.principal" : "hbase/_HOST@EXAMPLE.COM",
-          "hbase.master.keytab.file" : "/etc/security/keytabs/hbase.service.keytab",
-          "hbase.master.port" : "60000",
-          "hbase.regionserver.global.memstore.lowerLimit" : "0.38",
-          "hbase.regionserver.global.memstore.upperLimit" : "0.4",
-          "hbase.regionserver.handler.count" : "60",
-          "hbase.regionserver.info.port" : "0",
-          "hbase.regionserver.kerberos.principal" : "hbase/_HOST@EXAMPLE.COM",
-          "hbase.regionserver.keytab.file" : "/etc/security/keytabs/hbase.service.keytab",
-          "hbase.regionserver.port" : "0",
-          "hbase.rootdir" : "hdfs://с6401.ambari.apache.org:8020/user/yarn/.slider/cluster/h10/database/data",
-          "hbase.security.authentication" : "simple",
-          "hbase.security.authorization" : "false",
-          "hbase.stagingdir" : "hdfs://с6401.ambari.apache.org:8020/user/yarn/.slider/cluster/h10/database/staging",
-          "hbase.superuser" : "yarn",
-          "hbase.tmp.dir" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1409333994422_0009/container_1409333994422_0009_01_000002/work/app/tmp",
-          "hbase.zookeeper.property.clientPort" : "2181",
-          "hbase.zookeeper.quorum" : "с6403.ambari.apache.org,с6401.ambari.apache.org,с6402.ambari.apache.org",
-          "hbase.zookeeper.useMulti" : "true",
-          "hfile.block.cache.size" : "0.40",
-          "zookeeper.session.timeout" : "30000",
-          "zookeeper.znode.parent" : "/services/slider/users/yarn/h10"
-        },
-        "hdfs-site" : {
-          "dfs.block.access.token.enable" : "true",
-          "dfs.blockreport.initialDelay" : "120",
-          "dfs.blocksize" : "134217728",
-          "dfs.client.read.shortcircuit" : "true",
-          "dfs.client.read.shortcircuit.streams.cache.size" : "4096",
-          "dfs.cluster.administrators" : " hdfs",
-          "dfs.datanode.address" : "0.0.0.0:50010",
-          "dfs.datanode.balance.bandwidthPerSec" : "6250000",
-          "dfs.datanode.data.dir" : "/hadoop/hdfs/data",
-          "dfs.datanode.data.dir.perm" : "750",
-          "dfs.datanode.du.reserved" : "1073741824",
-          "dfs.datanode.failed.volumes.tolerated" : "0",
-          "dfs.datanode.http.address" : "0.0.0.0:50075",
-          "dfs.datanode.ipc.address" : "0.0.0.0:8010",
-          "dfs.datanode.kerberos.principal" : "dn/_HOST@EXAMPLE.COM",
-          "dfs.datanode.keytab.file" : "/etc/security/keytabs/dn.service.keytab",
-          "dfs.datanode.max.transfer.threads" : "1024",
-          "dfs.domain.socket.path" : "/var/lib/hadoop-hdfs/dn_socket",
-          "dfs.heartbeat.interval" : "3",
-          "dfs.hosts.exclude" : "/etc/hadoop/conf/dfs.exclude",
-          "dfs.https.port" : "50470",
-          "dfs.journalnode.edits.dir" : "/grid/0/hdfs/journal",
-          "dfs.journalnode.http-address" : "0.0.0.0:8480",
-          "dfs.namenode.accesstime.precision" : "0",
-          "dfs.namenode.avoid.read.stale.datanode" : "true",
-          "dfs.namenode.avoid.write.stale.datanode" : "true",
-          "dfs.namenode.checkpoint.dir" : "/hadoop/hdfs/namesecondary",
-          "dfs.namenode.checkpoint.edits.dir" : "/hadoop/hdfs/namesecondary",
-          "dfs.namenode.checkpoint.period" : "21600",
-          "dfs.namenode.checkpoint.txns" : "1000000",
-          "dfs.namenode.handler.count" : "40",
-          "dfs.namenode.http-address" : "с6401.ambari.apache.org:50070",
-          "dfs.namenode.https-address" : "с6401.ambari.apache.org:50470",
-          "dfs.namenode.kerberos.https.principal" : "HTTP/_HOST@EXAMPLE.COM",
-          "dfs.namenode.kerberos.principal" : "nn/_HOST@EXAMPLE.COM",
-          "dfs.namenode.keytab.file" : "/etc/security/keytabs/nn.service.keytab",
-          "dfs.namenode.name.dir" : "/hadoop/hdfs/namenode",
-          "dfs.namenode.name.dir.restore" : "true",
-          "dfs.namenode.safemode.threshold-pct" : "1.0f",
-          "dfs.namenode.secondary.http-address" : "с6402.ambari.apache.org:50090",
-          "dfs.namenode.stale.datanode.interval" : "30000",
-          "dfs.namenode.write.stale.datanode.ratio" : "1.0f",
-          "dfs.permissions.enabled" : "true",
-          "dfs.permissions.superusergroup" : "hdfs",
-          "dfs.replication" : "3",
-          "dfs.replication.max" : "50",
-          "dfs.secondary.namenode.kerberos.https.principal" : "HTTP/_HOST@EXAMPLE.COM",
-          "dfs.secondary.namenode.kerberos.principal" : "nn/_HOST@EXAMPLE.COM",
-          "dfs.secondary.namenode.keytab.file" : "/etc/security/keytabs/nn.service.keytab",
-          "dfs.support.append" : "true",
-          "dfs.web.authentication.kerberos.keytab" : "/etc/security/keytabs/spnego.service.keytab",
-          "dfs.web.authentication.kerberos.principal" : "HTTP/_HOST@EXAMPLE.COM",
-          "dfs.webhdfs.enabled" : "true",
-          "fs.permissions.umask-mode" : "022"
-        },
-        "logfolders" : {
-          "с6403.ambari.apache.org-container_1409333994422_0009_01_000002-AGENT_LOG_ROOT" : "/hadoop/yarn/log/application_1409333994422_0009/container_1409333994422_0009_01_000002",
-          "с6403.ambari.apache.org-container_1409333994422_0009_01_000002-AGENT_WORK_ROOT" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1409333994422_0009/container_1409333994422_0009_01_000002",
-          "с6404.ambari.apache.org-container_1409333994422_0009_01_000003-AGENT_LOG_ROOT" : "/hadoop/yarn/log/application_1409333994422_0009/container_1409333994422_0009_01_000003",
-          "с6404.ambari.apache.org-container_1409333994422_0009_01_000003-AGENT_WORK_ROOT" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1409333994422_0009/container_1409333994422_0009_01_000003"
-        },
-        "yarn-site" : {
-          "yarn.acl.enable" : "false",
-          "yarn.application.classpath" : "/etc/hadoop/conf,/usr/lib/hadoop/*,/usr/lib/hadoop/lib/*,/usr/lib/hadoop-hdfs/*,/usr/lib/hadoop-hdfs/lib/*,/usr/lib/hadoop-yarn/*,/usr/lib/hadoop-yarn/lib/*,/usr/lib/hadoop-mapreduce/*,/usr/lib/hadoop-mapreduce/lib/*",
-          "yarn.log-aggregation-enable" : "true",
-          "yarn.log-aggregation.retain-seconds" : "2592000",
-          "yarn.log.server.url" : "http://с6402.ambari.apache.org:19888/jobhistory/logs",
-          "yarn.nodemanager.address" : "0.0.0.0:45454",
-          "yarn.nodemanager.admin-env" : "MALLOC_ARENA_MAX=$MALLOC_ARENA_MAX",
-          "yarn.nodemanager.aux-services" : "mapreduce_shuffle",
-          "yarn.nodemanager.aux-services.mapreduce_shuffle.class" : "org.apache.hadoop.mapred.ShuffleHandler",
-          "yarn.nodemanager.container-executor.class" : "org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor",
-          "yarn.nodemanager.container-monitor.interval-ms" : "3000",
-          "yarn.nodemanager.delete.debug-delay-sec" : "0",
-          "yarn.nodemanager.disk-health-checker.min-healthy-disks" : "0.25",
-          "yarn.nodemanager.health-checker.interval-ms" : "135000",
-          "yarn.nodemanager.health-checker.script.timeout-ms" : "60000",
-          "yarn.nodemanager.linux-container-executor.group" : "hadoop",
-          "yarn.nodemanager.local-dirs" : "/hadoop/yarn/local",
-          "yarn.nodemanager.log-aggregation.compression-type" : "gz",
-          "yarn.nodemanager.log-dirs" : "/hadoop/yarn/log",
-          "yarn.nodemanager.log.retain-second" : "604800",
-          "yarn.nodemanager.remote-app-log-dir" : "/app-logs",
-          "yarn.nodemanager.remote-app-log-dir-suffix" : "logs",
-          "yarn.nodemanager.resource.memory-mb" : "2046",
-          "yarn.nodemanager.vmem-check-enabled" : "false",
-          "yarn.nodemanager.vmem-pmem-ratio" : "2.1",
-          "yarn.resourcemanager.address" : "с6402.ambari.apache.org:8050",
-          "yarn.resourcemanager.admin.address" : "с6402.ambari.apache.org:8141",
-          "yarn.resourcemanager.am.max-attempts" : "2",
-          "yarn.resourcemanager.hostname" : "с6402.ambari.apache.org",
-          "yarn.resourcemanager.nodes.exclude-path" : "/etc/hadoop/conf/yarn.exclude",
-          "yarn.resourcemanager.resource-tracker.address" : "с6402.ambari.apache.org:8025",
-          "yarn.resourcemanager.scheduler.address" : "с6402.ambari.apache.org:8030",
-          "yarn.resourcemanager.scheduler.class" : "org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler",
-          "yarn.resourcemanager.webapp.address" : "с6402.ambari.apache.org:8088",
-          "yarn.scheduler.maximum-allocation-mb" : "2046",
-          "yarn.scheduler.minimum-allocation-mb" : "682",
-          "yarn.timeline-service.address" : "с6402.ambari.apache.org:10200",
-          "yarn.timeline-service.enabled" : "true",
-          "yarn.timeline-service.generic-application-history.store-class" : "org.apache.hadoop.yarn.server.applicationhistoryservice.NullApplicationHistoryStore",
-          "yarn.timeline-service.leveldb-timeline-store.path" : "/hadoop/yarn/timeline",
-          "yarn.timeline-service.leveldb-timeline-store.ttl-interval-ms" : "300000",
-          "yarn.timeline-service.store-class" : "org.apache.hadoop.yarn.server.timeline.LeveldbTimelineStore",
-          "yarn.timeline-service.ttl-enable" : "true",
-          "yarn.timeline-service.ttl-ms" : "2678400000",
-          "yarn.timeline-service.webapp.address" : "с6402.ambari.apache.org:8188",
-          "yarn.timeline-service.webapp.https.address" : "с6402.ambari.apache.org:8190"
-        }
-      },
-      "jmx" : {
-        "ClusterId" : "125f1f5b-713e-421a-9179-aadfc24a2a05",
-        "ClusterRequests" : "2127",
-        "DeadRegionServers" : "0",
-        "IsActiveMaster" : "true",
-        "MasterActiveTime" : "1409360031151",
-        "MasterStartTime" : "1409360028629",
-        "MetricAverageLoad" : "2.0",
-        "RegionServers" : "1",
-        "ServerName" : "с6403.ambari.apache.org,60000,1409360025510",
-        "ZookeeperQuorum" : "с6401.ambari.apache.org:2181,с6403.ambari.apache.org:2181,с6402.ambari.apache.org:2181"
-      },
-      "urls" : {
-        "JMX" : "http://с6403.ambari.apache.org:33940/jmx",
-        "UI" : "http://с6403.ambari.apache.org:33940/master-status",
-        "app.ganglia" : "http://с6402.ambari.apache.org/ganglia?c=Application1",
-        "app.metrics" : "http://с6402.ambari.apache.org/cgi-bin/rrd.py?c=Application1"
-      }
-    },
-    {
-      "href" : "http://c6401:8080/api/v1/views/SLIDER/versions/1.0.0/instances/Myv1/apps/1411422858327_5",
-      "appVersion" : "0.98.4.2.2.0.0-741-hadoop2",
-      "description" : "apache hbase is the hadoop database, a distributed, scalable, big data store....",
-      "diagnostics" : "",
-      "endTime" : 0,
-      "id" : "1411422858327_5",
-      "instance_name" : "Myv1",
-      "metrics" : null,
-      "name" : "h1",
-      "startTime" : 1411501941839,
-      "state" : "RUNNING",
-      "supportedMetrics" : [
-        "splitSize_avg_time",
-        "splitTime_avg_time",
-        "cluster_requests",
-        "regions",
-        "flushQueueSize",
-        "readRequestsCount"
-      ],
-      "type" : "hbase",
-      "user" : "yarn",
-      "version" : "1.0.0",
-      "view_name" : "SLIDER",
-      "yarnId" : "application_1411422858327_0005",
-      "alerts" : {
-        "detail" : [
-          {
-            "description" : "slider-appmaster component",
-            "status" : "OK",
-            "last_status_time" : 1411568300430,
-            "actual_status" : "OK",
-            "last_status" : "OK",
-            "status_time" : 1411568300430,
-            "component_name" : "slider-appmaster",
-            "output" : "1 out of 1 active",
-            "service_name" : "HBASE",
-            "host_name" : "mop-2.c.pramod-thangali.internal"
-          },
-          {
-            "description" : "HBASE_MASTER component",
-            "status" : "OK",
-            "last_status_time" : 1411568300430,
-            "actual_status" : "OK",
-            "last_status" : "OK",
-            "status_time" : 1411568300430,
-            "component_name" : "HBASE_MASTER",
-            "output" : "1 out of 1 active",
-            "service_name" : "HBASE",
-            "host_name" : "mop-3.c.pramod-thangali.internal"
-          },
-          {
-            "description" : "HBASE_REGIONSERVER component",
-            "status" : "CRITICAL",
-            "last_status_time" : 1411568300430,
-            "actual_status" : "CRITICAL",
-            "last_status" : "CRITICAL",
-            "status_time" : 1411568300430,
-            "component_name" : "HBASE_REGIONSERVER",
-            "output" : "10 out of 20 active",
-            "service_name" : "HBASE",
-            "host_name" : "mop-1.c.pramod-thangali.internal"
-          }
-        ],
-        "summary" : {
-          "CRITICAL" : 1,
-          "OK" : 2,
-          "UNKNOWN" : 0,
-          "WARNING" : 0
-        }
-      },
-      "components" : {
-        "HBASE_MASTER" : {
-          "componentName" : "HBASE_MASTER",
-          "instanceCount" : 1,
-          "activeContainers" : {
-            "container_1411422858327_0005_01_000006" : {
-              "released" : "false",
-              "startTime" : "1411501961763",
-              "createTime" : "1411501961108",
-              "environment" : "[AGENT_WORK_ROOT=\"$PWD\", HADOOP_USER_NAME=\"yarn\", AGENT_LOG_ROOT=\"$LOG_DIRS\", PYTHONPATH=\"./infra/agent/slider-agent/\", SLIDER_PASSPHRASE=\"DEV\", MALLOC_ARENA_MAX=\"4\"]",
-              "host" : "mop-3.c.pramod-thangali.internal",
-              "name" : "container_1411422858327_0005_01_000006",
-              "command" : "python ./infra/agent/slider-agent/agent/main.py --label container_1411422858327_0005_01_000006___HBASE_MASTER --zk-quorum mop-1.c.pramod-thangali.internal:2181,mop-2.c.pramod-thangali.internal:2181,mop-3.c.pramod-thangali.internal:2181 --zk-reg-path /registry/org-apache-slider/h1 > <LOG_DIR>/agent.out 2>&1 ; ",
-              "state" : "3",
-              "role" : "HBASE_MASTER",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "1"
-            }
-          },
-          "completedContainers" : { }
-        },
-        "HBASE_REGIONSERVER" : {
-          "componentName" : "HBASE_REGIONSERVER",
-          "instanceCount" : 20,
-          "activeContainers" : {
-            "container_1411422858327_0005_01_000005" : {
-              "released" : "false",
-              "startTime" : "1411501961924",
-              "createTime" : "1411501961108",
-              "environment" : "[AGENT_WORK_ROOT=\"$PWD\", HADOOP_USER_NAME=\"yarn\", AGENT_LOG_ROOT=\"$LOG_DIRS\", PYTHONPATH=\"./infra/agent/slider-agent/\", SLIDER_PASSPHRASE=\"DEV\", MALLOC_ARENA_MAX=\"4\"]",
-              "host" : "mop-1.c.pramod-thangali.internal",
-              "name" : "container_1411422858327_0005_01_000005",
-              "command" : "python ./infra/agent/slider-agent/agent/main.py --label container_1411422858327_0005_01_000005___HBASE_REGIONSERVER --zk-quorum mop-1.c.pramod-thangali.internal:2181,mop-2.c.pramod-thangali.internal:2181,mop-3.c.pramod-thangali.internal:2181 --zk-reg-path /registry/org-apache-slider/h1 > <LOG_DIR>/agent.out 2>&1 ; ",
-              "state" : "3",
-              "role" : "HBASE_REGIONSERVER",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "2"
-            },
-            "container_1411422858327_0005_01_000007" : {
-              "released" : "false",
-              "startTime" : "1411501961583",
-              "createTime" : "1411501961108",
-              "environment" : "[AGENT_WORK_ROOT=\"$PWD\", HADOOP_USER_NAME=\"yarn\", AGENT_LOG_ROOT=\"$LOG_DIRS\", PYTHONPATH=\"./infra/agent/slider-agent/\", SLIDER_PASSPHRASE=\"DEV\", MALLOC_ARENA_MAX=\"4\"]",
-              "host" : "mop-3.c.pramod-thangali.internal",
-              "name" : "container_1411422858327_0005_01_000007",
-              "command" : "python ./infra/agent/slider-agent/agent/main.py --label container_1411422858327_0005_01_000007___HBASE_REGIONSERVER --zk-quorum mop-1.c.pramod-thangali.internal:2181,mop-2.c.pramod-thangali.internal:2181,mop-3.c.pramod-thangali.internal:2181 --zk-reg-path /registry/org-apache-slider/h1 > <LOG_DIR>/agent.out 2>&1 ; ",
-              "state" : "3",
-              "role" : "HBASE_REGIONSERVER",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "2"
-            },
-            "container_1411422858327_0005_01_000008" : {
-              "released" : "false",
-              "startTime" : "1411501961664",
-              "createTime" : "1411501961108",
-              "environment" : "[AGENT_WORK_ROOT=\"$PWD\", HADOOP_USER_NAME=\"yarn\", AGENT_LOG_ROOT=\"$LOG_DIRS\", PYTHONPATH=\"./infra/agent/slider-agent/\", SLIDER_PASSPHRASE=\"DEV\", MALLOC_ARENA_MAX=\"4\"]",
-              "host" : "mop-3.c.pramod-thangali.internal",
-              "name" : "container_1411422858327_0005_01_000008",
-              "command" : "python ./infra/agent/slider-agent/agent/main.py --label container_1411422858327_0005_01_000008___HBASE_REGIONSERVER --zk-quorum mop-1.c.pramod-thangali.internal:2181,mop-2.c.pramod-thangali.internal:2181,mop-3.c.pramod-thangali.internal:2181 --zk-reg-path /registry/org-apache-slider/h1 > <LOG_DIR>/agent.out 2>&1 ; ",
-              "state" : "3",
-              "role" : "HBASE_REGIONSERVER",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "2"
-            },
-            "container_1411422858327_0005_01_000009" : {
-              "released" : "false",
-              "startTime" : "1411501961331",
-              "createTime" : "1411501961071",
-              "environment" : "[AGENT_WORK_ROOT=\"$PWD\", HADOOP_USER_NAME=\"yarn\", AGENT_LOG_ROOT=\"$LOG_DIRS\", PYTHONPATH=\"./infra/agent/slider-agent/\", SLIDER_PASSPHRASE=\"DEV\", MALLOC_ARENA_MAX=\"4\"]",
-              "host" : "mop-4.c.pramod-thangali.internal",
-              "name" : "container_1411422858327_0005_01_000009",
-              "command" : "python ./infra/agent/slider-agent/agent/main.py --label container_1411422858327_0005_01_000009___HBASE_REGIONSERVER --zk-quorum mop-1.c.pramod-thangali.internal:2181,mop-2.c.pramod-thangali.internal:2181,mop-3.c.pramod-thangali.internal:2181 --zk-reg-path /registry/org-apache-slider/h1 > <LOG_DIR>/agent.out 2>&1 ; ",
-              "state" : "3",
-              "role" : "HBASE_REGIONSERVER",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "2"
-            },
-            "container_1411422858327_0005_01_000010" : {
-              "released" : "false",
-              "startTime" : "1411501961465",
-              "createTime" : "1411501961108",
-              "environment" : "[AGENT_WORK_ROOT=\"$PWD\", HADOOP_USER_NAME=\"yarn\", AGENT_LOG_ROOT=\"$LOG_DIRS\", PYTHONPATH=\"./infra/agent/slider-agent/\", SLIDER_PASSPHRASE=\"DEV\", MALLOC_ARENA_MAX=\"4\"]",
-              "host" : "mop-4.c.pramod-thangali.internal",
-              "name" : "container_1411422858327_0005_01_000010",
-              "command" : "python ./infra/agent/slider-agent/agent/main.py --label container_1411422858327_0005_01_000010___HBASE_REGIONSERVER --zk-quorum mop-1.c.pramod-thangali.internal:2181,mop-2.c.pramod-thangali.internal:2181,mop-3.c.pramod-thangali.internal:2181 --zk-reg-path /registry/org-apache-slider/h1 > <LOG_DIR>/agent.out 2>&1 ; ",
-              "state" : "3",
-              "role" : "HBASE_REGIONSERVER",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "2"
-            },
-            "container_1411422858327_0005_01_000011" : {
-              "released" : "false",
-              "startTime" : "1411501962431",
-              "createTime" : "1411501962220",
-              "environment" : "[AGENT_WORK_ROOT=\"$PWD\", HADOOP_USER_NAME=\"yarn\", AGENT_LOG_ROOT=\"$LOG_DIRS\", PYTHONPATH=\"./infra/agent/slider-agent/\", SLIDER_PASSPHRASE=\"DEV\", MALLOC_ARENA_MAX=\"4\"]",
-              "host" : "mop-1.c.pramod-thangali.internal",
-              "name" : "container_1411422858327_0005_01_000011",
-              "command" : "python ./infra/agent/slider-agent/agent/main.py --label container_1411422858327_0005_01_000011___HBASE_REGIONSERVER --zk-quorum mop-1.c.pramod-thangali.internal:2181,mop-2.c.pramod-thangali.internal:2181,mop-3.c.pramod-thangali.internal:2181 --zk-reg-path /registry/org-apache-slider/h1 > <LOG_DIR>/agent.out 2>&1 ; ",
-              "state" : "3",
-              "role" : "HBASE_REGIONSERVER",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "2"
-            },
-            "container_1411422858327_0005_01_000002" : {
-              "released" : "false",
-              "startTime" : "1411501961211",
-              "createTime" : "1411501961108",
-              "environment" : "[AGENT_WORK_ROOT=\"$PWD\", HADOOP_USER_NAME=\"yarn\", AGENT_LOG_ROOT=\"$LOG_DIRS\", PYTHONPATH=\"./infra/agent/slider-agent/\", SLIDER_PASSPHRASE=\"DEV\", MALLOC_ARENA_MAX=\"4\"]",
-              "host" : "mop-2.c.pramod-thangali.internal",
-              "name" : "container_1411422858327_0005_01_000002",
-              "command" : "python ./infra/agent/slider-agent/agent/main.py --label container_1411422858327_0005_01_000002___HBASE_REGIONSERVER --zk-quorum mop-1.c.pramod-thangali.internal:2181,mop-2.c.pramod-thangali.internal:2181,mop-3.c.pramod-thangali.internal:2181 --zk-reg-path /registry/org-apache-slider/h1 > <LOG_DIR>/agent.out 2>&1 ; ",
-              "state" : "3",
-              "role" : "HBASE_REGIONSERVER",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "2"
-            },
-            "container_1411422858327_0005_01_000003" : {
-              "released" : "false",
-              "startTime" : "1411501962002",
-              "createTime" : "1411501961108",
-              "environment" : "[AGENT_WORK_ROOT=\"$PWD\", HADOOP_USER_NAME=\"yarn\", AGENT_LOG_ROOT=\"$LOG_DIRS\", PYTHONPATH=\"./infra/agent/slider-agent/\", SLIDER_PASSPHRASE=\"DEV\", MALLOC_ARENA_MAX=\"4\"]",
-              "host" : "mop-2.c.pramod-thangali.internal",
-              "name" : "container_1411422858327_0005_01_000003",
-              "command" : "python ./infra/agent/slider-agent/agent/main.py --label container_1411422858327_0005_01_000003___HBASE_REGIONSERVER --zk-quorum mop-1.c.pramod-thangali.internal:2181,mop-2.c.pramod-thangali.internal:2181,mop-3.c.pramod-thangali.internal:2181 --zk-reg-path /registry/org-apache-slider/h1 > <LOG_DIR>/agent.out 2>&1 ; ",
-              "state" : "3",
-              "role" : "HBASE_REGIONSERVER",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "2"
-            },
-            "container_1411422858327_0005_01_000012" : {
-              "released" : "false",
-              "startTime" : "1411501962232",
-              "createTime" : "1411501962219",
-              "environment" : "[AGENT_WORK_ROOT=\"$PWD\", HADOOP_USER_NAME=\"yarn\", AGENT_LOG_ROOT=\"$LOG_DIRS\", PYTHONPATH=\"./infra/agent/slider-agent/\", SLIDER_PASSPHRASE=\"DEV\", MALLOC_ARENA_MAX=\"4\"]",
-              "host" : "mop-4.c.pramod-thangali.internal",
-              "name" : "container_1411422858327_0005_01_000012",
-              "command" : "python ./infra/agent/slider-agent/agent/main.py --label container_1411422858327_0005_01_000012___HBASE_REGIONSERVER --zk-quorum mop-1.c.pramod-thangali.internal:2181,mop-2.c.pramod-thangali.internal:2181,mop-3.c.pramod-thangali.internal:2181 --zk-reg-path /registry/org-apache-slider/h1 > <LOG_DIR>/agent.out 2>&1 ; ",
-              "state" : "3",
-              "role" : "HBASE_REGIONSERVER",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "2"
-            },
-            "container_1411422858327_0005_01_000004" : {
-              "released" : "false",
-              "startTime" : "1411501961817",
-              "createTime" : "1411501961108",
-              "environment" : "[AGENT_WORK_ROOT=\"$PWD\", HADOOP_USER_NAME=\"yarn\", AGENT_LOG_ROOT=\"$LOG_DIRS\", PYTHONPATH=\"./infra/agent/slider-agent/\", SLIDER_PASSPHRASE=\"DEV\", MALLOC_ARENA_MAX=\"4\"]",
-              "host" : "mop-1.c.pramod-thangali.internal",
-              "name" : "container_1411422858327_0005_01_000004",
-              "command" : "python ./infra/agent/slider-agent/agent/main.py --label container_1411422858327_0005_01_000004___HBASE_REGIONSERVER --zk-quorum mop-1.c.pramod-thangali.internal:2181,mop-2.c.pramod-thangali.internal:2181,mop-3.c.pramod-thangali.internal:2181 --zk-reg-path /registry/org-apache-slider/h1 > <LOG_DIR>/agent.out 2>&1 ; ",
-              "state" : "3",
-              "role" : "HBASE_REGIONSERVER",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "2"
-            }
-          },
-          "completedContainers" : { }
-        },
-        "slider-appmaster" : {
-          "componentName" : "slider-appmaster",
-          "instanceCount" : 1,
-          "activeContainers" : {
-            "container_1411422858327_0005_01_000001" : {
-              "released" : "false",
-              "startTime" : "0",
-              "createTime" : "0",
-              "host" : "mop-2.c.pramod-thangali.internal",
-              "name" : "container_1411422858327_0005_01_000001",
-              "command" : "",
-              "state" : "3",
-              "role" : "slider-appmaster",
-              "exitCode" : "0",
-              "diagnostics" : "",
-              "roleId" : "0"
-            }
-          },
-          "completedContainers" : { }
-        }
-      },
-      "configs" : {
-        "componentinstancedata" : {
-          "container_1411422858327_0005_01_000006.app.jmx" : "mop-3.c.pramod-thangali.internal:43240/jmx",
-          "container_1411422858327_0005_01_000006.app.monitor" : "mop-3.c.pramod-thangali.internal:43240/master-status"
-        },
-        "core-site" : {
-          "fs.defaultFS" : "hdfs://mop-5.c.pramod-thangali.internal:8020",
-          "fs.trash.interval" : "360",
-          "hadoop.proxyuser.falcon.groups" : "users",
-          "hadoop.proxyuser.falcon.hosts" : "*",
-          "hadoop.proxyuser.hcat.groups" : "users",
-          "hadoop.proxyuser.hcat.hosts" : "mop-2.c.pramod-thangali.internal",
-          "hadoop.proxyuser.hive.groups" : "users",
-          "hadoop.proxyuser.hive.hosts" : "mop-2.c.pramod-thangali.internal",
-          "hadoop.proxyuser.oozie.groups" : "*",
-          "hadoop.proxyuser.oozie.hosts" : "mop-2.c.pramod-thangali.internal",
-          "hadoop.security.auth_to_local" : "\n        RULE:[2:$1@$0]([rn]m@.*)s/.*/yarn/\n        RULE:[2:$1@$0](jhs@.*)s/.*/mapred/\n        RULE:[2:$1@$0]([nd]n@.*)s/.*/hdfs/\n        RULE:[2:$1@$0](hm@.*)s/.*/hbase/\n        RULE:[2:$1@$0](rs@.*)s/.*/hbase/\n        DEFAULT",
-          "hadoop.security.authentication" : "simple",
-          "hadoop.security.authorization" : "false",
-          "io.compression.codecs" : "org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec",
-          "io.file.buffer.size" : "131072",
-          "io.serializations" : "org.apache.hadoop.io.serializer.WritableSerialization",
-          "ipc.client.connect.max.retries" : "50",
-          "ipc.client.connection.maxidletime" : "30000",
-          "ipc.client.idlethreshold" : "8000",
-          "ipc.server.tcpnodelay" : "true",
-          "mapreduce.jobtracker.webinterface.trusted" : "false"
-        },
-        "hbase-site" : {
-          "dfs.domain.socket.path" : "/var/lib/hadoop-hdfs/dn_socket",
-          "hbase.client.keyvalue.maxsize" : "10485760",
-          "hbase.client.scanner.caching" : "100",
-          "hbase.cluster.distributed" : "true",
-          "hbase.defaults.for.version.skip" : "true",
-          "hbase.hregion.majorcompaction" : "86400000",
-          "hbase.hregion.max.filesize" : "10737418240",
-          "hbase.hregion.memstore.block.multiplier" : "2",
-          "hbase.hregion.memstore.flush.size" : "134217728",
-          "hbase.hregion.memstore.mslab.enabled" : "true",
-          "hbase.hstore.blockingStoreFiles" : "10",
-          "hbase.hstore.compactionThreshold" : "3",
-          "hbase.hstore.flush.retries.number" : "120",
-          "hbase.local.dir" : "${hbase.tmp.dir}/local",
-          "hbase.master.info.bindAddress" : "0.0.0.0",
-          "hbase.master.info.port" : "43240",
-          "hbase.master.kerberos.principal" : "hbase/_HOST@EXAMPLE.COM",
-          "hbase.master.keytab.file" : "/etc/security/keytabs/hbase.service.keytab",
-          "hbase.master.port" : "0",
-          "hbase.regionserver.global.memstore.lowerLimit" : "0.38",
-          "hbase.regionserver.global.memstore.upperLimit" : "0.4",
-          "hbase.regionserver.handler.count" : "60",
-          "hbase.regionserver.info.port" : "0",
-          "hbase.regionserver.kerberos.principal" : "hbase/_HOST@EXAMPLE.COM",
-          "hbase.regionserver.keytab.file" : "/etc/security/keytabs/hbase.service.keytab",
-          "hbase.regionserver.port" : "0",
-          "hbase.rootdir" : "hdfs://mop-5.c.pramod-thangali.internal:8020/user/yarn/.slider/cluster/h1/database",
-          "hbase.security.authentication" : "simple",
-          "hbase.security.authorization" : "false",
-          "hbase.superuser" : "yarn",
-          "hbase.tmp.dir" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1411422858327_0005/container_1411422858327_0005_01_000006/work/app/tmp",
-          "hbase.zookeeper.property.clientPort" : "2181",
-          "hbase.zookeeper.quorum" : "mop-1.c.pramod-thangali.internal,mop-2.c.pramod-thangali.internal,mop-3.c.pramod-thangali.internal",
-          "hbase.zookeeper.useMulti" : "true",
-          "hfile.block.cache.size" : "0.40",
-          "zookeeper.session.timeout" : "30000",
-          "zookeeper.znode.parent" : "/services/slider/users/yarn/h1"
-        },
-        "hdfs-site" : {
-          "dfs.block.access.token.enable" : "true",
-          "dfs.blockreport.initialDelay" : "120",
-          "dfs.blocksize" : "134217728",
-          "dfs.client.read.shortcircuit" : "true",
-          "dfs.client.read.shortcircuit.streams.cache.size" : "4096",
-          "dfs.cluster.administrators" : " hdfs",
-          "dfs.datanode.address" : "0.0.0.0:50010",
-          "dfs.datanode.balance.bandwidthPerSec" : "6250000",
-          "dfs.datanode.data.dir" : "/hadoop/hdfs/data",
-          "dfs.datanode.data.dir.perm" : "750",
-          "dfs.datanode.du.reserved" : "1073741824",
-          "dfs.datanode.failed.volumes.tolerated" : "0",
-          "dfs.datanode.http.address" : "0.0.0.0:50075",
-          "dfs.datanode.ipc.address" : "0.0.0.0:8010",
-          "dfs.datanode.kerberos.principal" : "dn/_HOST@EXAMPLE.COM",
-          "dfs.datanode.keytab.file" : "/etc/security/keytabs/dn.service.keytab",
-          "dfs.datanode.max.transfer.threads" : "1024",
-          "dfs.domain.socket.path" : "/var/lib/hadoop-hdfs/dn_socket",
-          "dfs.heartbeat.interval" : "3",
-          "dfs.hosts.exclude" : "/etc/hadoop/conf/dfs.exclude",
-          "dfs.https.port" : "50470",
-          "dfs.journalnode.edits.dir" : "/grid/0/hdfs/journal",
-          "dfs.journalnode.http-address" : "0.0.0.0:8480",
-          "dfs.namenode.accesstime.precision" : "0",
-          "dfs.namenode.avoid.read.stale.datanode" : "true",
-          "dfs.namenode.avoid.write.stale.datanode" : "true",
-          "dfs.namenode.checkpoint.dir" : "/hadoop/hdfs/namesecondary",
-          "dfs.namenode.checkpoint.edits.dir" : "/hadoop/hdfs/namesecondary",
-          "dfs.namenode.checkpoint.period" : "21600",
-          "dfs.namenode.checkpoint.txns" : "1000000",
-          "dfs.namenode.handler.count" : "40",
-          "dfs.namenode.http-address" : "mop-5.c.pramod-thangali.internal:50070",
-          "dfs.namenode.https-address" : "mop-5.c.pramod-thangali.internal:50470",
-          "dfs.namenode.kerberos.https.principal" : "HTTP/_HOST@EXAMPLE.COM",
-          "dfs.namenode.kerberos.principal" : "nn/_HOST@EXAMPLE.COM",
-          "dfs.namenode.keytab.file" : "/etc/security/keytabs/nn.service.keytab",
-          "dfs.namenode.name.dir" : "/hadoop/hdfs/namenode",
-          "dfs.namenode.name.dir.restore" : "true",
-          "dfs.namenode.safemode.threshold-pct" : "1.0f",
-          "dfs.namenode.secondary.http-address" : "mop-2.c.pramod-thangali.internal:50090",
-          "dfs.namenode.stale.datanode.interval" : "30000",
-          "dfs.namenode.write.stale.datanode.ratio" : "1.0f",
-          "dfs.permissions.enabled" : "true",
-          "dfs.permissions.superusergroup" : "hdfs",
-          "dfs.replication" : "3",
-          "dfs.replication.max" : "50",
-          "dfs.secondary.namenode.kerberos.https.principal" : "HTTP/_HOST@EXAMPLE.COM",
-          "dfs.secondary.namenode.kerberos.principal" : "nn/_HOST@EXAMPLE.COM",
-          "dfs.secondary.namenode.keytab.file" : "/etc/security/keytabs/nn.service.keytab",
-          "dfs.support.append" : "true",
-          "dfs.web.authentication.kerberos.keytab" : "/etc/security/keytabs/spnego.service.keytab",
-          "dfs.web.authentication.kerberos.principal" : "HTTP/_HOST@EXAMPLE.COM",
-          "dfs.webhdfs.enabled" : "true",
-          "fs.permissions.umask-mode" : "022",
-          "dfs.http.policy" : "HTTP_ONLY"
-        },
-        "logfolders" : {
-          "HBASE_MASTER->mop-3.c.pramod-thangali.internal->AGENT_LOG_ROOT->container_1411422858327_0005_01_000006" : "/hadoop/yarn/log/application_1411422858327_0005/container_1411422858327_0005_01_000006",
-          "HBASE_MASTER->mop-3.c.pramod-thangali.internal->AGENT_WORK_ROOT->container_1411422858327_0005_01_000006" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1411422858327_0005/container_1411422858327_0005_01_000006",
-          "HBASE_REGIONSERVER->mop-1.c.pramod-thangali.internal->AGENT_LOG_ROOT->container_1411422858327_0005_01_000004" : "/hadoop/yarn/log/application_1411422858327_0005/container_1411422858327_0005_01_000004",
-          "HBASE_REGIONSERVER->mop-1.c.pramod-thangali.internal->AGENT_LOG_ROOT->container_1411422858327_0005_01_000005" : "/hadoop/yarn/log/application_1411422858327_0005/container_1411422858327_0005_01_000005",
-          "HBASE_REGIONSERVER->mop-1.c.pramod-thangali.internal->AGENT_LOG_ROOT->container_1411422858327_0005_01_000011" : "/hadoop/yarn/log/application_1411422858327_0005/container_1411422858327_0005_01_000011",
-          "HBASE_REGIONSERVER->mop-1.c.pramod-thangali.internal->AGENT_WORK_ROOT->container_1411422858327_0005_01_000004" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1411422858327_0005/container_1411422858327_0005_01_000004",
-          "HBASE_REGIONSERVER->mop-1.c.pramod-thangali.internal->AGENT_WORK_ROOT->container_1411422858327_0005_01_000005" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1411422858327_0005/container_1411422858327_0005_01_000005",
-          "HBASE_REGIONSERVER->mop-1.c.pramod-thangali.internal->AGENT_WORK_ROOT->container_1411422858327_0005_01_000011" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1411422858327_0005/container_1411422858327_0005_01_000011",
-          "HBASE_REGIONSERVER->mop-2.c.pramod-thangali.internal->AGENT_LOG_ROOT->container_1411422858327_0005_01_000002" : "/hadoop/yarn/log/application_1411422858327_0005/container_1411422858327_0005_01_000002",
-          "HBASE_REGIONSERVER->mop-2.c.pramod-thangali.internal->AGENT_LOG_ROOT->container_1411422858327_0005_01_000003" : "/hadoop/yarn/log/application_1411422858327_0005/container_1411422858327_0005_01_000003",
-          "HBASE_REGIONSERVER->mop-2.c.pramod-thangali.internal->AGENT_WORK_ROOT->container_1411422858327_0005_01_000002" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1411422858327_0005/container_1411422858327_0005_01_000002",
-          "HBASE_REGIONSERVER->mop-2.c.pramod-thangali.internal->AGENT_WORK_ROOT->container_1411422858327_0005_01_000003" : "/hadoop/yarn/local/usercache/yarn/appcache/application_1411422858327_0005/container_1411422858327_0005_01_000003",
-          "HBASE_REGIONSERVER->mop-

<TRUNCATED>

[30/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/qunit.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/qunit.js b/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/qunit.js
deleted file mode 100644
index 474cfe5..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/qunit.js
+++ /dev/null
@@ -1,2495 +0,0 @@
-/*!
- * QUnit 1.15.0
- * http://qunitjs.com/
- *
- * Copyright 2014 jQuery Foundation and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2014-08-08T16:00Z
- */
-
-(function( window ) {
-
-var QUnit,
-	config,
-	onErrorFnPrev,
-	fileName = ( sourceFromStacktrace( 0 ) || "" ).replace( /(:\d+)+\)?/, "" ).replace( /.+\//, "" ),
-	toString = Object.prototype.toString,
-	hasOwn = Object.prototype.hasOwnProperty,
-	// Keep a local reference to Date (GH-283)
-	Date = window.Date,
-	now = Date.now || function() {
-		return new Date().getTime();
-	},
-	setTimeout = window.setTimeout,
-	clearTimeout = window.clearTimeout,
-	defined = {
-		document: typeof window.document !== "undefined",
-		setTimeout: typeof window.setTimeout !== "undefined",
-		sessionStorage: (function() {
-			var x = "qunit-test-string";
-			try {
-				sessionStorage.setItem( x, x );
-				sessionStorage.removeItem( x );
-				return true;
-			} catch ( e ) {
-				return false;
-			}
-		}())
-	},
-	/**
-	 * Provides a normalized error string, correcting an issue
-	 * with IE 7 (and prior) where Error.prototype.toString is
-	 * not properly implemented
-	 *
-	 * Based on http://es5.github.com/#x15.11.4.4
-	 *
-	 * @param {String|Error} error
-	 * @return {String} error message
-	 */
-	errorString = function( error ) {
-		var name, message,
-			errorString = error.toString();
-		if ( errorString.substring( 0, 7 ) === "[object" ) {
-			name = error.name ? error.name.toString() : "Error";
-			message = error.message ? error.message.toString() : "";
-			if ( name && message ) {
-				return name + ": " + message;
-			} else if ( name ) {
-				return name;
-			} else if ( message ) {
-				return message;
-			} else {
-				return "Error";
-			}
-		} else {
-			return errorString;
-		}
-	},
-	/**
-	 * Makes a clone of an object using only Array or Object as base,
-	 * and copies over the own enumerable properties.
-	 *
-	 * @param {Object} obj
-	 * @return {Object} New object with only the own properties (recursively).
-	 */
-	objectValues = function( obj ) {
-		var key, val,
-			vals = QUnit.is( "array", obj ) ? [] : {};
-		for ( key in obj ) {
-			if ( hasOwn.call( obj, key ) ) {
-				val = obj[ key ];
-				vals[ key ] = val === Object( val ) ? objectValues( val ) : val;
-			}
-		}
-		return vals;
-	};
-
-// Root QUnit object.
-// `QUnit` initialized at top of scope
-QUnit = {
-
-	// call on start of module test to prepend name to all tests
-	module: function( name, testEnvironment ) {
-		config.currentModule = name;
-		config.currentModuleTestEnvironment = testEnvironment;
-		config.modules[ name ] = true;
-	},
-
-	asyncTest: function( testName, expected, callback ) {
-		if ( arguments.length === 2 ) {
-			callback = expected;
-			expected = null;
-		}
-
-		QUnit.test( testName, expected, callback, true );
-	},
-
-	test: function( testName, expected, callback, async ) {
-		var test;
-
-		if ( arguments.length === 2 ) {
-			callback = expected;
-			expected = null;
-		}
-
-		test = new Test({
-			testName: testName,
-			expected: expected,
-			async: async,
-			callback: callback,
-			module: config.currentModule,
-			moduleTestEnvironment: config.currentModuleTestEnvironment,
-			stack: sourceFromStacktrace( 2 )
-		});
-
-		if ( !validTest( test ) ) {
-			return;
-		}
-
-		test.queue();
-	},
-
-	start: function( count ) {
-		var message;
-
-		// QUnit hasn't been initialized yet.
-		// Note: RequireJS (et al) may delay onLoad
-		if ( config.semaphore === undefined ) {
-			QUnit.begin(function() {
-				// This is triggered at the top of QUnit.load, push start() to the event loop, to allow QUnit.load to finish first
-				setTimeout(function() {
-					QUnit.start( count );
-				});
-			});
-			return;
-		}
-
-		config.semaphore -= count || 1;
-		// don't start until equal number of stop-calls
-		if ( config.semaphore > 0 ) {
-			return;
-		}
-
-		// Set the starting time when the first test is run
-		QUnit.config.started = QUnit.config.started || now();
-		// ignore if start is called more often then stop
-		if ( config.semaphore < 0 ) {
-			config.semaphore = 0;
-
-			message = "Called start() while already started (QUnit.config.semaphore was 0 already)";
-
-			if ( config.current ) {
-				QUnit.pushFailure( message, sourceFromStacktrace( 2 ) );
-			} else {
-				throw new Error( message );
-			}
-
-			return;
-		}
-		// A slight delay, to avoid any current callbacks
-		if ( defined.setTimeout ) {
-			setTimeout(function() {
-				if ( config.semaphore > 0 ) {
-					return;
-				}
-				if ( config.timeout ) {
-					clearTimeout( config.timeout );
-				}
-
-				config.blocking = false;
-				process( true );
-			}, 13 );
-		} else {
-			config.blocking = false;
-			process( true );
-		}
-	},
-
-	stop: function( count ) {
-		config.semaphore += count || 1;
-		config.blocking = true;
-
-		if ( config.testTimeout && defined.setTimeout ) {
-			clearTimeout( config.timeout );
-			config.timeout = setTimeout(function() {
-				QUnit.ok( false, "Test timed out" );
-				config.semaphore = 1;
-				QUnit.start();
-			}, config.testTimeout );
-		}
-	}
-};
-
-// We use the prototype to distinguish between properties that should
-// be exposed as globals (and in exports) and those that shouldn't
-(function() {
-	function F() {}
-	F.prototype = QUnit;
-	QUnit = new F();
-
-	// Make F QUnit's constructor so that we can add to the prototype later
-	QUnit.constructor = F;
-}());
-
-/**
- * Config object: Maintain internal state
- * Later exposed as QUnit.config
- * `config` initialized at top of scope
- */
-config = {
-	// The queue of tests to run
-	queue: [],
-
-	// block until document ready
-	blocking: true,
-
-	// when enabled, show only failing tests
-	// gets persisted through sessionStorage and can be changed in UI via checkbox
-	hidepassed: false,
-
-	// by default, run previously failed tests first
-	// very useful in combination with "Hide passed tests" checked
-	reorder: true,
-
-	// by default, modify document.title when suite is done
-	altertitle: true,
-
-	// by default, scroll to top of the page when suite is done
-	scrolltop: true,
-
-	// when enabled, all tests must call expect()
-	requireExpects: false,
-
-	// add checkboxes that are persisted in the query-string
-	// when enabled, the id is set to `true` as a `QUnit.config` property
-	urlConfig: [
-		{
-			id: "noglobals",
-			label: "Check for Globals",
-			tooltip: "Enabling this will test if any test introduces new properties on the `window` object. Stored as query-strings."
-		},
-		{
-			id: "notrycatch",
-			label: "No try-catch",
-			tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging exceptions in IE reasonable. Stored as query-strings."
-		}
-	],
-
-	// Set of all modules.
-	modules: {},
-
-	callbacks: {}
-};
-
-// Initialize more QUnit.config and QUnit.urlParams
-(function() {
-	var i, current,
-		location = window.location || { search: "", protocol: "file:" },
-		params = location.search.slice( 1 ).split( "&" ),
-		length = params.length,
-		urlParams = {};
-
-	if ( params[ 0 ] ) {
-		for ( i = 0; i < length; i++ ) {
-			current = params[ i ].split( "=" );
-			current[ 0 ] = decodeURIComponent( current[ 0 ] );
-
-			// allow just a key to turn on a flag, e.g., test.html?noglobals
-			current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
-			if ( urlParams[ current[ 0 ] ] ) {
-				urlParams[ current[ 0 ] ] = [].concat( urlParams[ current[ 0 ] ], current[ 1 ] );
-			} else {
-				urlParams[ current[ 0 ] ] = current[ 1 ];
-			}
-		}
-	}
-
-	QUnit.urlParams = urlParams;
-
-	// String search anywhere in moduleName+testName
-	config.filter = urlParams.filter;
-
-	// Exact match of the module name
-	config.module = urlParams.module;
-
-	config.testNumber = [];
-	if ( urlParams.testNumber ) {
-
-		// Ensure that urlParams.testNumber is an array
-		urlParams.testNumber = [].concat( urlParams.testNumber );
-		for ( i = 0; i < urlParams.testNumber.length; i++ ) {
-			current = urlParams.testNumber[ i ];
-			config.testNumber.push( parseInt( current, 10 ) );
-		}
-	}
-
-	// Figure out if we're running the tests from a server or not
-	QUnit.isLocal = location.protocol === "file:";
-}());
-
-extend( QUnit, {
-
-	config: config,
-
-	// Safe object type checking
-	is: function( type, obj ) {
-		return QUnit.objectType( obj ) === type;
-	},
-
-	objectType: function( obj ) {
-		if ( typeof obj === "undefined" ) {
-			return "undefined";
-		}
-
-		// Consider: typeof null === object
-		if ( obj === null ) {
-			return "null";
-		}
-
-		var match = toString.call( obj ).match( /^\[object\s(.*)\]$/ ),
-			type = match && match[ 1 ] || "";
-
-		switch ( type ) {
-			case "Number":
-				if ( isNaN( obj ) ) {
-					return "nan";
-				}
-				return "number";
-			case "String":
-			case "Boolean":
-			case "Array":
-			case "Date":
-			case "RegExp":
-			case "Function":
-				return type.toLowerCase();
-		}
-		if ( typeof obj === "object" ) {
-			return "object";
-		}
-		return undefined;
-	},
-
-	url: function( params ) {
-		params = extend( extend( {}, QUnit.urlParams ), params );
-		var key,
-			querystring = "?";
-
-		for ( key in params ) {
-			if ( hasOwn.call( params, key ) ) {
-				querystring += encodeURIComponent( key ) + "=" +
-					encodeURIComponent( params[ key ] ) + "&";
-			}
-		}
-		return window.location.protocol + "//" + window.location.host +
-			window.location.pathname + querystring.slice( 0, -1 );
-	},
-
-	extend: extend
-});
-
-/**
- * @deprecated: Created for backwards compatibility with test runner that set the hook function
- * into QUnit.{hook}, instead of invoking it and passing the hook function.
- * QUnit.constructor is set to the empty F() above so that we can add to it's prototype here.
- * Doing this allows us to tell if the following methods have been overwritten on the actual
- * QUnit object.
- */
-extend( QUnit.constructor.prototype, {
-
-	// Logging callbacks; all receive a single argument with the listed properties
-	// run test/logs.html for any related changes
-	begin: registerLoggingCallback( "begin" ),
-
-	// done: { failed, passed, total, runtime }
-	done: registerLoggingCallback( "done" ),
-
-	// log: { result, actual, expected, message }
-	log: registerLoggingCallback( "log" ),
-
-	// testStart: { name }
-	testStart: registerLoggingCallback( "testStart" ),
-
-	// testDone: { name, failed, passed, total, runtime }
-	testDone: registerLoggingCallback( "testDone" ),
-
-	// moduleStart: { name }
-	moduleStart: registerLoggingCallback( "moduleStart" ),
-
-	// moduleDone: { name, failed, passed, total }
-	moduleDone: registerLoggingCallback( "moduleDone" )
-});
-
-QUnit.load = function() {
-	runLoggingCallbacks( "begin", {
-		totalTests: Test.count
-	});
-
-	// Initialize the configuration options
-	extend( config, {
-		stats: { all: 0, bad: 0 },
-		moduleStats: { all: 0, bad: 0 },
-		started: 0,
-		updateRate: 1000,
-		autostart: true,
-		filter: "",
-		semaphore: 1
-	}, true );
-
-	config.blocking = false;
-
-	if ( config.autostart ) {
-		QUnit.start();
-	}
-};
-
-// `onErrorFnPrev` initialized at top of scope
-// Preserve other handlers
-onErrorFnPrev = window.onerror;
-
-// Cover uncaught exceptions
-// Returning true will suppress the default browser handler,
-// returning false will let it run.
-window.onerror = function( error, filePath, linerNr ) {
-	var ret = false;
-	if ( onErrorFnPrev ) {
-		ret = onErrorFnPrev( error, filePath, linerNr );
-	}
-
-	// Treat return value as window.onerror itself does,
-	// Only do our handling if not suppressed.
-	if ( ret !== true ) {
-		if ( QUnit.config.current ) {
-			if ( QUnit.config.current.ignoreGlobalErrors ) {
-				return true;
-			}
-			QUnit.pushFailure( error, filePath + ":" + linerNr );
-		} else {
-			QUnit.test( "global failure", extend(function() {
-				QUnit.pushFailure( error, filePath + ":" + linerNr );
-			}, { validTest: validTest } ) );
-		}
-		return false;
-	}
-
-	return ret;
-};
-
-function done() {
-	config.autorun = true;
-
-	// Log the last module results
-	if ( config.previousModule ) {
-		runLoggingCallbacks( "moduleDone", {
-			name: config.previousModule,
-			failed: config.moduleStats.bad,
-			passed: config.moduleStats.all - config.moduleStats.bad,
-			total: config.moduleStats.all
-		});
-	}
-	delete config.previousModule;
-
-	var runtime = now() - config.started,
-		passed = config.stats.all - config.stats.bad;
-
-	runLoggingCallbacks( "done", {
-		failed: config.stats.bad,
-		passed: passed,
-		total: config.stats.all,
-		runtime: runtime
-	});
-}
-
-/** @return Boolean: true if this test should be ran */
-function validTest( test ) {
-	var include,
-		filter = config.filter && config.filter.toLowerCase(),
-		module = config.module && config.module.toLowerCase(),
-		fullName = ( test.module + ": " + test.testName ).toLowerCase();
-
-	// Internally-generated tests are always valid
-	if ( test.callback && test.callback.validTest === validTest ) {
-		delete test.callback.validTest;
-		return true;
-	}
-
-	if ( config.testNumber.length > 0 ) {
-		if ( inArray( test.testNumber, config.testNumber ) < 0 ) {
-			return false;
-		}
-	}
-
-	if ( module && ( !test.module || test.module.toLowerCase() !== module ) ) {
-		return false;
-	}
-
-	if ( !filter ) {
-		return true;
-	}
-
-	include = filter.charAt( 0 ) !== "!";
-	if ( !include ) {
-		filter = filter.slice( 1 );
-	}
-
-	// If the filter matches, we need to honour include
-	if ( fullName.indexOf( filter ) !== -1 ) {
-		return include;
-	}
-
-	// Otherwise, do the opposite
-	return !include;
-}
-
-// Doesn't support IE6 to IE9
-// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
-function extractStacktrace( e, offset ) {
-	offset = offset === undefined ? 4 : offset;
-
-	var stack, include, i;
-
-	if ( e.stacktrace ) {
-
-		// Opera 12.x
-		return e.stacktrace.split( "\n" )[ offset + 3 ];
-	} else if ( e.stack ) {
-
-		// Firefox, Chrome, Safari 6+, IE10+, PhantomJS and Node
-		stack = e.stack.split( "\n" );
-		if ( /^error$/i.test( stack[ 0 ] ) ) {
-			stack.shift();
-		}
-		if ( fileName ) {
-			include = [];
-			for ( i = offset; i < stack.length; i++ ) {
-				if ( stack[ i ].indexOf( fileName ) !== -1 ) {
-					break;
-				}
-				include.push( stack[ i ] );
-			}
-			if ( include.length ) {
-				return include.join( "\n" );
-			}
-		}
-		return stack[ offset ];
-	} else if ( e.sourceURL ) {
-
-		// Safari < 6
-		// exclude useless self-reference for generated Error objects
-		if ( /qunit.js$/.test( e.sourceURL ) ) {
-			return;
-		}
-
-		// for actual exceptions, this is useful
-		return e.sourceURL + ":" + e.line;
-	}
-}
-function sourceFromStacktrace( offset ) {
-	try {
-		throw new Error();
-	} catch ( e ) {
-		return extractStacktrace( e, offset );
-	}
-}
-
-function synchronize( callback, last ) {
-	config.queue.push( callback );
-
-	if ( config.autorun && !config.blocking ) {
-		process( last );
-	}
-}
-
-function process( last ) {
-	function next() {
-		process( last );
-	}
-	var start = now();
-	config.depth = config.depth ? config.depth + 1 : 1;
-
-	while ( config.queue.length && !config.blocking ) {
-		if ( !defined.setTimeout || config.updateRate <= 0 || ( ( now() - start ) < config.updateRate ) ) {
-			config.queue.shift()();
-		} else {
-			setTimeout( next, 13 );
-			break;
-		}
-	}
-	config.depth--;
-	if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) {
-		done();
-	}
-}
-
-function saveGlobal() {
-	config.pollution = [];
-
-	if ( config.noglobals ) {
-		for ( var key in window ) {
-			if ( hasOwn.call( window, key ) ) {
-				// in Opera sometimes DOM element ids show up here, ignore them
-				if ( /^qunit-test-output/.test( key ) ) {
-					continue;
-				}
-				config.pollution.push( key );
-			}
-		}
-	}
-}
-
-function checkPollution() {
-	var newGlobals,
-		deletedGlobals,
-		old = config.pollution;
-
-	saveGlobal();
-
-	newGlobals = diff( config.pollution, old );
-	if ( newGlobals.length > 0 ) {
-		QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join( ", " ) );
-	}
-
-	deletedGlobals = diff( old, config.pollution );
-	if ( deletedGlobals.length > 0 ) {
-		QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join( ", " ) );
-	}
-}
-
-// returns a new Array with the elements that are in a but not in b
-function diff( a, b ) {
-	var i, j,
-		result = a.slice();
-
-	for ( i = 0; i < result.length; i++ ) {
-		for ( j = 0; j < b.length; j++ ) {
-			if ( result[ i ] === b[ j ] ) {
-				result.splice( i, 1 );
-				i--;
-				break;
-			}
-		}
-	}
-	return result;
-}
-
-function extend( a, b, undefOnly ) {
-	for ( var prop in b ) {
-		if ( hasOwn.call( b, prop ) ) {
-
-			// Avoid "Member not found" error in IE8 caused by messing with window.constructor
-			if ( !( prop === "constructor" && a === window ) ) {
-				if ( b[ prop ] === undefined ) {
-					delete a[ prop ];
-				} else if ( !( undefOnly && typeof a[ prop ] !== "undefined" ) ) {
-					a[ prop ] = b[ prop ];
-				}
-			}
-		}
-	}
-
-	return a;
-}
-
-function registerLoggingCallback( key ) {
-
-	// Initialize key collection of logging callback
-	if ( QUnit.objectType( config.callbacks[ key ] ) === "undefined" ) {
-		config.callbacks[ key ] = [];
-	}
-
-	return function( callback ) {
-		config.callbacks[ key ].push( callback );
-	};
-}
-
-function runLoggingCallbacks( key, args ) {
-	var i, l, callbacks;
-
-	callbacks = config.callbacks[ key ];
-	for ( i = 0, l = callbacks.length; i < l; i++ ) {
-		callbacks[ i ]( args );
-	}
-}
-
-// from jquery.js
-function inArray( elem, array ) {
-	if ( array.indexOf ) {
-		return array.indexOf( elem );
-	}
-
-	for ( var i = 0, length = array.length; i < length; i++ ) {
-		if ( array[ i ] === elem ) {
-			return i;
-		}
-	}
-
-	return -1;
-}
-
-function Test( settings ) {
-	extend( this, settings );
-	this.assert = new Assert( this );
-	this.assertions = [];
-	this.testNumber = ++Test.count;
-}
-
-Test.count = 0;
-
-Test.prototype = {
-	setup: function() {
-		if (
-
-			// Emit moduleStart when we're switching from one module to another
-			this.module !== config.previousModule ||
-
-				// They could be equal (both undefined) but if the previousModule property doesn't
-				// yet exist it means this is the first test in a suite that isn't wrapped in a
-				// module, in which case we'll just emit a moduleStart event for 'undefined'.
-				// Without this, reporters can get testStart before moduleStart  which is a problem.
-				!hasOwn.call( config, "previousModule" )
-		) {
-			if ( hasOwn.call( config, "previousModule" ) ) {
-				runLoggingCallbacks( "moduleDone", {
-					name: config.previousModule,
-					failed: config.moduleStats.bad,
-					passed: config.moduleStats.all - config.moduleStats.bad,
-					total: config.moduleStats.all
-				});
-			}
-			config.previousModule = this.module;
-			config.moduleStats = { all: 0, bad: 0 };
-			runLoggingCallbacks( "moduleStart", {
-				name: this.module
-			});
-		}
-
-		config.current = this;
-
-		this.testEnvironment = extend({
-			setup: function() {},
-			teardown: function() {}
-		}, this.moduleTestEnvironment );
-
-		this.started = now();
-		runLoggingCallbacks( "testStart", {
-			name: this.testName,
-			module: this.module,
-			testNumber: this.testNumber
-		});
-
-		if ( !config.pollution ) {
-			saveGlobal();
-		}
-		if ( config.notrycatch ) {
-			this.testEnvironment.setup.call( this.testEnvironment, this.assert );
-			return;
-		}
-		try {
-			this.testEnvironment.setup.call( this.testEnvironment, this.assert );
-		} catch ( e ) {
-			this.pushFailure( "Setup failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 0 ) );
-		}
-	},
-	run: function() {
-		config.current = this;
-
-		if ( this.async ) {
-			QUnit.stop();
-		}
-
-		this.callbackStarted = now();
-
-		if ( config.notrycatch ) {
-			this.callback.call( this.testEnvironment, this.assert );
-			this.callbackRuntime = now() - this.callbackStarted;
-			return;
-		}
-
-		try {
-			this.callback.call( this.testEnvironment, this.assert );
-			this.callbackRuntime = now() - this.callbackStarted;
-		} catch ( e ) {
-			this.callbackRuntime = now() - this.callbackStarted;
-
-			this.pushFailure( "Died on test #" + ( this.assertions.length + 1 ) + " " + this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) );
-
-			// else next test will carry the responsibility
-			saveGlobal();
-
-			// Restart the tests if they're blocking
-			if ( config.blocking ) {
-				QUnit.start();
-			}
-		}
-	},
-	teardown: function() {
-		config.current = this;
-		if ( config.notrycatch ) {
-			if ( typeof this.callbackRuntime === "undefined" ) {
-				this.callbackRuntime = now() - this.callbackStarted;
-			}
-			this.testEnvironment.teardown.call( this.testEnvironment, this.assert );
-			return;
-		} else {
-			try {
-				this.testEnvironment.teardown.call( this.testEnvironment, this.assert );
-			} catch ( e ) {
-				this.pushFailure( "Teardown failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 0 ) );
-			}
-		}
-		checkPollution();
-	},
-	finish: function() {
-		config.current = this;
-		if ( config.requireExpects && this.expected === null ) {
-			this.pushFailure( "Expected number of assertions to be defined, but expect() was not called.", this.stack );
-		} else if ( this.expected !== null && this.expected !== this.assertions.length ) {
-			this.pushFailure( "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run", this.stack );
-		} else if ( this.expected === null && !this.assertions.length ) {
-			this.pushFailure( "Expected at least one assertion, but none were run - call expect(0) to accept zero assertions.", this.stack );
-		}
-
-		var i,
-			bad = 0;
-
-		this.runtime = now() - this.started;
-		config.stats.all += this.assertions.length;
-		config.moduleStats.all += this.assertions.length;
-
-		for ( i = 0; i < this.assertions.length; i++ ) {
-			if ( !this.assertions[ i ].result ) {
-				bad++;
-				config.stats.bad++;
-				config.moduleStats.bad++;
-			}
-		}
-
-		runLoggingCallbacks( "testDone", {
-			name: this.testName,
-			module: this.module,
-			failed: bad,
-			passed: this.assertions.length - bad,
-			total: this.assertions.length,
-			runtime: this.runtime,
-
-			// HTML Reporter use
-			assertions: this.assertions,
-			testNumber: this.testNumber,
-
-			// DEPRECATED: this property will be removed in 2.0.0, use runtime instead
-			duration: this.runtime
-		});
-
-		config.current = undefined;
-	},
-
-	queue: function() {
-		var bad,
-			test = this;
-
-		function run() {
-			// each of these can by async
-			synchronize(function() {
-				test.setup();
-			});
-			synchronize(function() {
-				test.run();
-			});
-			synchronize(function() {
-				test.teardown();
-			});
-			synchronize(function() {
-				test.finish();
-			});
-		}
-
-		// `bad` initialized at top of scope
-		// defer when previous test run passed, if storage is available
-		bad = QUnit.config.reorder && defined.sessionStorage &&
-				+sessionStorage.getItem( "qunit-test-" + this.module + "-" + this.testName );
-
-		if ( bad ) {
-			run();
-		} else {
-			synchronize( run, true );
-		}
-	},
-
-	push: function( result, actual, expected, message ) {
-		var source,
-			details = {
-				module: this.module,
-				name: this.testName,
-				result: result,
-				message: message,
-				actual: actual,
-				expected: expected,
-				testNumber: this.testNumber
-			};
-
-		if ( !result ) {
-			source = sourceFromStacktrace();
-
-			if ( source ) {
-				details.source = source;
-			}
-		}
-
-		runLoggingCallbacks( "log", details );
-
-		this.assertions.push({
-			result: !!result,
-			message: message
-		});
-	},
-
-	pushFailure: function( message, source, actual ) {
-		if ( !this instanceof Test ) {
-			throw new Error( "pushFailure() assertion outside test context, was " + sourceFromStacktrace( 2 ) );
-		}
-
-		var details = {
-				module: this.module,
-				name: this.testName,
-				result: false,
-				message: message || "error",
-				actual: actual || null,
-				testNumber: this.testNumber
-			};
-
-		if ( source ) {
-			details.source = source;
-		}
-
-		runLoggingCallbacks( "log", details );
-
-		this.assertions.push({
-			result: false,
-			message: message
-		});
-	}
-};
-
-QUnit.pushFailure = function() {
-	if ( !QUnit.config.current ) {
-		throw new Error( "pushFailure() assertion outside test context, in " + sourceFromStacktrace( 2 ) );
-	}
-
-	// Gets current test obj
-	var currentTest = QUnit.config.current.assert.test;
-
-	return currentTest.pushFailure.apply( currentTest, arguments );
-};
-
-function Assert( testContext ) {
-	this.test = testContext;
-}
-
-// Assert helpers
-QUnit.assert = Assert.prototype = {
-
-	// Specify the number of expected assertions to guarantee that failed test (no assertions are run at all) don't slip through.
-	expect: function( asserts ) {
-		if ( arguments.length === 1 ) {
-			this.test.expected = asserts;
-		} else {
-			return this.test.expected;
-		}
-	},
-
-	// Exports test.push() to the user API
-	push: function() {
-		var assert = this;
-
-		// Backwards compatibility fix.
-		// Allows the direct use of global exported assertions and QUnit.assert.*
-		// Although, it's use is not recommended as it can leak assertions
-		// to other tests from async tests, because we only get a reference to the current test,
-		// not exactly the test where assertion were intended to be called.
-		if ( !QUnit.config.current ) {
-			throw new Error( "assertion outside test context, in " + sourceFromStacktrace( 2 ) );
-		}
-		if ( !( assert instanceof Assert ) ) {
-			assert = QUnit.config.current.assert;
-		}
-		return assert.test.push.apply( assert.test, arguments );
-	},
-
-	/**
-	 * Asserts rough true-ish result.
-	 * @name ok
-	 * @function
-	 * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
-	 */
-	ok: function( result, message ) {
-		message = message || ( result ? "okay" : "failed, expected argument to be truthy, was: " +
-			QUnit.dump.parse( result ) );
-		if ( !!result ) {
-			this.push( true, result, true, message );
-		} else {
-			this.test.pushFailure( message, null, result );
-		}
-	},
-
-	/**
-	 * Assert that the first two arguments are equal, with an optional message.
-	 * Prints out both actual and expected values.
-	 * @name equal
-	 * @function
-	 * @example equal( format( "Received {0} bytes.", 2), "Received 2 bytes.", "format() replaces {0} with next argument" );
-	 */
-	equal: function( actual, expected, message ) {
-		/*jshint eqeqeq:false */
-		this.push( expected == actual, actual, expected, message );
-	},
-
-	/**
-	 * @name notEqual
-	 * @function
-	 */
-	notEqual: function( actual, expected, message ) {
-		/*jshint eqeqeq:false */
-		this.push( expected != actual, actual, expected, message );
-	},
-
-	/**
-	 * @name propEqual
-	 * @function
-	 */
-	propEqual: function( actual, expected, message ) {
-		actual = objectValues( actual );
-		expected = objectValues( expected );
-		this.push( QUnit.equiv( actual, expected ), actual, expected, message );
-	},
-
-	/**
-	 * @name notPropEqual
-	 * @function
-	 */
-	notPropEqual: function( actual, expected, message ) {
-		actual = objectValues( actual );
-		expected = objectValues( expected );
-		this.push( !QUnit.equiv( actual, expected ), actual, expected, message );
-	},
-
-	/**
-	 * @name deepEqual
-	 * @function
-	 */
-	deepEqual: function( actual, expected, message ) {
-		this.push( QUnit.equiv( actual, expected ), actual, expected, message );
-	},
-
-	/**
-	 * @name notDeepEqual
-	 * @function
-	 */
-	notDeepEqual: function( actual, expected, message ) {
-		this.push( !QUnit.equiv( actual, expected ), actual, expected, message );
-	},
-
-	/**
-	 * @name strictEqual
-	 * @function
-	 */
-	strictEqual: function( actual, expected, message ) {
-		this.push( expected === actual, actual, expected, message );
-	},
-
-	/**
-	 * @name notStrictEqual
-	 * @function
-	 */
-	notStrictEqual: function( actual, expected, message ) {
-		this.push( expected !== actual, actual, expected, message );
-	},
-
-	"throws": function( block, expected, message ) {
-		var actual, expectedType,
-			expectedOutput = expected,
-			ok = false;
-
-		// 'expected' is optional unless doing string comparison
-		if ( message == null && typeof expected === "string" ) {
-			message = expected;
-			expected = null;
-		}
-
-		this.test.ignoreGlobalErrors = true;
-		try {
-			block.call( this.test.testEnvironment );
-		} catch (e) {
-			actual = e;
-		}
-		this.test.ignoreGlobalErrors = false;
-
-		if ( actual ) {
-			expectedType = QUnit.objectType( expected );
-
-			// we don't want to validate thrown error
-			if ( !expected ) {
-				ok = true;
-				expectedOutput = null;
-
-			// expected is a regexp
-			} else if ( expectedType === "regexp" ) {
-				ok = expected.test( errorString( actual ) );
-
-			// expected is a string
-			} else if ( expectedType === "string" ) {
-				ok = expected === errorString( actual );
-
-			// expected is a constructor, maybe an Error constructor
-			} else if ( expectedType === "function" && actual instanceof expected ) {
-				ok = true;
-
-			// expected is an Error object
-			} else if ( expectedType === "object" ) {
-				ok = actual instanceof expected.constructor &&
-					actual.name === expected.name &&
-					actual.message === expected.message;
-
-			// expected is a validation function which returns true if validation passed
-			} else if ( expectedType === "function" && expected.call( {}, actual ) === true ) {
-				expectedOutput = null;
-				ok = true;
-			}
-
-			this.push( ok, actual, expectedOutput, message );
-		} else {
-			this.test.pushFailure( message, null, "No exception was thrown." );
-		}
-	}
-};
-
-// Test for equality any JavaScript type.
-// Author: Philippe Rathé <pr...@gmail.com>
-QUnit.equiv = (function() {
-
-	// Call the o related callback with the given arguments.
-	function bindCallbacks( o, callbacks, args ) {
-		var prop = QUnit.objectType( o );
-		if ( prop ) {
-			if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) {
-				return callbacks[ prop ].apply( callbacks, args );
-			} else {
-				return callbacks[ prop ]; // or undefined
-			}
-		}
-	}
-
-	// the real equiv function
-	var innerEquiv,
-
-		// stack to decide between skip/abort functions
-		callers = [],
-
-		// stack to avoiding loops from circular referencing
-		parents = [],
-		parentsB = [],
-
-		getProto = Object.getPrototypeOf || function( obj ) {
-			/* jshint camelcase: false, proto: true */
-			return obj.__proto__;
-		},
-		callbacks = (function() {
-
-			// for string, boolean, number and null
-			function useStrictEquality( b, a ) {
-
-				/*jshint eqeqeq:false */
-				if ( b instanceof a.constructor || a instanceof b.constructor ) {
-
-					// to catch short annotation VS 'new' annotation of a
-					// declaration
-					// e.g. var i = 1;
-					// var j = new Number(1);
-					return a == b;
-				} else {
-					return a === b;
-				}
-			}
-
-			return {
-				"string": useStrictEquality,
-				"boolean": useStrictEquality,
-				"number": useStrictEquality,
-				"null": useStrictEquality,
-				"undefined": useStrictEquality,
-
-				"nan": function( b ) {
-					return isNaN( b );
-				},
-
-				"date": function( b, a ) {
-					return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf();
-				},
-
-				"regexp": function( b, a ) {
-					return QUnit.objectType( b ) === "regexp" &&
-
-						// the regex itself
-						a.source === b.source &&
-
-						// and its modifiers
-						a.global === b.global &&
-
-						// (gmi) ...
-						a.ignoreCase === b.ignoreCase &&
-						a.multiline === b.multiline &&
-						a.sticky === b.sticky;
-				},
-
-				// - skip when the property is a method of an instance (OOP)
-				// - abort otherwise,
-				// initial === would have catch identical references anyway
-				"function": function() {
-					var caller = callers[ callers.length - 1 ];
-					return caller !== Object && typeof caller !== "undefined";
-				},
-
-				"array": function( b, a ) {
-					var i, j, len, loop, aCircular, bCircular;
-
-					// b could be an object literal here
-					if ( QUnit.objectType( b ) !== "array" ) {
-						return false;
-					}
-
-					len = a.length;
-					if ( len !== b.length ) {
-						// safe and faster
-						return false;
-					}
-
-					// track reference to avoid circular references
-					parents.push( a );
-					parentsB.push( b );
-					for ( i = 0; i < len; i++ ) {
-						loop = false;
-						for ( j = 0; j < parents.length; j++ ) {
-							aCircular = parents[ j ] === a[ i ];
-							bCircular = parentsB[ j ] === b[ i ];
-							if ( aCircular || bCircular ) {
-								if ( a[ i ] === b[ i ] || aCircular && bCircular ) {
-									loop = true;
-								} else {
-									parents.pop();
-									parentsB.pop();
-									return false;
-								}
-							}
-						}
-						if ( !loop && !innerEquiv( a[ i ], b[ i ] ) ) {
-							parents.pop();
-							parentsB.pop();
-							return false;
-						}
-					}
-					parents.pop();
-					parentsB.pop();
-					return true;
-				},
-
-				"object": function( b, a ) {
-
-					/*jshint forin:false */
-					var i, j, loop, aCircular, bCircular,
-						// Default to true
-						eq = true,
-						aProperties = [],
-						bProperties = [];
-
-					// comparing constructors is more strict than using
-					// instanceof
-					if ( a.constructor !== b.constructor ) {
-
-						// Allow objects with no prototype to be equivalent to
-						// objects with Object as their constructor.
-						if ( !( ( getProto( a ) === null && getProto( b ) === Object.prototype ) ||
-							( getProto( b ) === null && getProto( a ) === Object.prototype ) ) ) {
-							return false;
-						}
-					}
-
-					// stack constructor before traversing properties
-					callers.push( a.constructor );
-
-					// track reference to avoid circular references
-					parents.push( a );
-					parentsB.push( b );
-
-					// be strict: don't ensure hasOwnProperty and go deep
-					for ( i in a ) {
-						loop = false;
-						for ( j = 0; j < parents.length; j++ ) {
-							aCircular = parents[ j ] === a[ i ];
-							bCircular = parentsB[ j ] === b[ i ];
-							if ( aCircular || bCircular ) {
-								if ( a[ i ] === b[ i ] || aCircular && bCircular ) {
-									loop = true;
-								} else {
-									eq = false;
-									break;
-								}
-							}
-						}
-						aProperties.push( i );
-						if ( !loop && !innerEquiv( a[ i ], b[ i ] ) ) {
-							eq = false;
-							break;
-						}
-					}
-
-					parents.pop();
-					parentsB.pop();
-					callers.pop(); // unstack, we are done
-
-					for ( i in b ) {
-						bProperties.push( i ); // collect b's properties
-					}
-
-					// Ensures identical properties name
-					return eq && innerEquiv( aProperties.sort(), bProperties.sort() );
-				}
-			};
-		}());
-
-	innerEquiv = function() { // can take multiple arguments
-		var args = [].slice.apply( arguments );
-		if ( args.length < 2 ) {
-			return true; // end transition
-		}
-
-		return ( (function( a, b ) {
-			if ( a === b ) {
-				return true; // catch the most you can
-			} else if ( a === null || b === null || typeof a === "undefined" ||
-					typeof b === "undefined" ||
-					QUnit.objectType( a ) !== QUnit.objectType( b ) ) {
-
-				// don't lose time with error prone cases
-				return false;
-			} else {
-				return bindCallbacks( a, callbacks, [ b, a ] );
-			}
-
-			// apply transition with (1..n) arguments
-		}( args[ 0 ], args[ 1 ] ) ) && innerEquiv.apply( this, args.splice( 1, args.length - 1 ) ) );
-	};
-
-	return innerEquiv;
-}());
-
-// Based on jsDump by Ariel Flesler
-// http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html
-QUnit.dump = (function() {
-	function quote( str ) {
-		return "\"" + str.toString().replace( /"/g, "\\\"" ) + "\"";
-	}
-	function literal( o ) {
-		return o + "";
-	}
-	function join( pre, arr, post ) {
-		var s = dump.separator(),
-			base = dump.indent(),
-			inner = dump.indent( 1 );
-		if ( arr.join ) {
-			arr = arr.join( "," + s + inner );
-		}
-		if ( !arr ) {
-			return pre + post;
-		}
-		return [ pre, inner + arr, base + post ].join( s );
-	}
-	function array( arr, stack ) {
-		var i = arr.length,
-			ret = new Array( i );
-		this.up();
-		while ( i-- ) {
-			ret[ i ] = this.parse( arr[ i ], undefined, stack );
-		}
-		this.down();
-		return join( "[", ret, "]" );
-	}
-
-	var reName = /^function (\w+)/,
-		dump = {
-			// type is used mostly internally, you can fix a (custom)type in advance
-			parse: function( obj, type, stack ) {
-				stack = stack || [];
-				var inStack, res,
-					parser = this.parsers[ type || this.typeOf( obj ) ];
-
-				type = typeof parser;
-				inStack = inArray( obj, stack );
-
-				if ( inStack !== -1 ) {
-					return "recursion(" + ( inStack - stack.length ) + ")";
-				}
-				if ( type === "function" ) {
-					stack.push( obj );
-					res = parser.call( this, obj, stack );
-					stack.pop();
-					return res;
-				}
-				return ( type === "string" ) ? parser : this.parsers.error;
-			},
-			typeOf: function( obj ) {
-				var type;
-				if ( obj === null ) {
-					type = "null";
-				} else if ( typeof obj === "undefined" ) {
-					type = "undefined";
-				} else if ( QUnit.is( "regexp", obj ) ) {
-					type = "regexp";
-				} else if ( QUnit.is( "date", obj ) ) {
-					type = "date";
-				} else if ( QUnit.is( "function", obj ) ) {
-					type = "function";
-				} else if ( typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined" ) {
-					type = "window";
-				} else if ( obj.nodeType === 9 ) {
-					type = "document";
-				} else if ( obj.nodeType ) {
-					type = "node";
-				} else if (
-
-					// native arrays
-					toString.call( obj ) === "[object Array]" ||
-
-					// NodeList objects
-					( typeof obj.length === "number" && typeof obj.item !== "undefined" && ( obj.length ? obj.item( 0 ) === obj[ 0 ] : ( obj.item( 0 ) === null && typeof obj[ 0 ] === "undefined" ) ) )
-				) {
-					type = "array";
-				} else if ( obj.constructor === Error.prototype.constructor ) {
-					type = "error";
-				} else {
-					type = typeof obj;
-				}
-				return type;
-			},
-			separator: function() {
-				return this.multiline ? this.HTML ? "<br />" : "\n" : this.HTML ? "&nbsp;" : " ";
-			},
-			// extra can be a number, shortcut for increasing-calling-decreasing
-			indent: function( extra ) {
-				if ( !this.multiline ) {
-					return "";
-				}
-				var chr = this.indentChar;
-				if ( this.HTML ) {
-					chr = chr.replace( /\t/g, "   " ).replace( / /g, "&nbsp;" );
-				}
-				return new Array( this.depth + ( extra || 0 ) ).join( chr );
-			},
-			up: function( a ) {
-				this.depth += a || 1;
-			},
-			down: function( a ) {
-				this.depth -= a || 1;
-			},
-			setParser: function( name, parser ) {
-				this.parsers[ name ] = parser;
-			},
-			// The next 3 are exposed so you can use them
-			quote: quote,
-			literal: literal,
-			join: join,
-			//
-			depth: 1,
-			// This is the list of parsers, to modify them, use dump.setParser
-			parsers: {
-				window: "[Window]",
-				document: "[Document]",
-				error: function( error ) {
-					return "Error(\"" + error.message + "\")";
-				},
-				unknown: "[Unknown]",
-				"null": "null",
-				"undefined": "undefined",
-				"function": function( fn ) {
-					var ret = "function",
-						// functions never have name in IE
-						name = "name" in fn ? fn.name : ( reName.exec( fn ) || [] )[ 1 ];
-
-					if ( name ) {
-						ret += " " + name;
-					}
-					ret += "( ";
-
-					ret = [ ret, dump.parse( fn, "functionArgs" ), "){" ].join( "" );
-					return join( ret, dump.parse( fn, "functionCode" ), "}" );
-				},
-				array: array,
-				nodelist: array,
-				"arguments": array,
-				object: function( map, stack ) {
-					/*jshint forin:false */
-					var ret = [], keys, key, val, i, nonEnumerableProperties;
-					dump.up();
-					keys = [];
-					for ( key in map ) {
-						keys.push( key );
-					}
-
-					// Some properties are not always enumerable on Error objects.
-					nonEnumerableProperties = [ "message", "name" ];
-					for ( i in nonEnumerableProperties ) {
-						key = nonEnumerableProperties[ i ];
-						if ( key in map && !( key in keys ) ) {
-							keys.push( key );
-						}
-					}
-					keys.sort();
-					for ( i = 0; i < keys.length; i++ ) {
-						key = keys[ i ];
-						val = map[ key ];
-						ret.push( dump.parse( key, "key" ) + ": " + dump.parse( val, undefined, stack ) );
-					}
-					dump.down();
-					return join( "{", ret, "}" );
-				},
-				node: function( node ) {
-					var len, i, val,
-						open = dump.HTML ? "&lt;" : "<",
-						close = dump.HTML ? "&gt;" : ">",
-						tag = node.nodeName.toLowerCase(),
-						ret = open + tag,
-						attrs = node.attributes;
-
-					if ( attrs ) {
-						for ( i = 0, len = attrs.length; i < len; i++ ) {
-							val = attrs[ i ].nodeValue;
-
-							// IE6 includes all attributes in .attributes, even ones not explicitly set.
-							// Those have values like undefined, null, 0, false, "" or "inherit".
-							if ( val && val !== "inherit" ) {
-								ret += " " + attrs[ i ].nodeName + "=" + dump.parse( val, "attribute" );
-							}
-						}
-					}
-					ret += close;
-
-					// Show content of TextNode or CDATASection
-					if ( node.nodeType === 3 || node.nodeType === 4 ) {
-						ret += node.nodeValue;
-					}
-
-					return ret + open + "/" + tag + close;
-				},
-
-				// function calls it internally, it's the arguments part of the function
-				functionArgs: function( fn ) {
-					var args,
-						l = fn.length;
-
-					if ( !l ) {
-						return "";
-					}
-
-					args = new Array( l );
-					while ( l-- ) {
-
-						// 97 is 'a'
-						args[ l ] = String.fromCharCode( 97 + l );
-					}
-					return " " + args.join( ", " ) + " ";
-				},
-				// object calls it internally, the key part of an item in a map
-				key: quote,
-				// function calls it internally, it's the content of the function
-				functionCode: "[code]",
-				// node calls it internally, it's an html attribute value
-				attribute: quote,
-				string: quote,
-				date: quote,
-				regexp: literal,
-				number: literal,
-				"boolean": literal
-			},
-			// if true, entities are escaped ( <, >, \t, space and \n )
-			HTML: false,
-			// indentation unit
-			indentChar: "  ",
-			// if true, items in a collection, are separated by a \n, else just a space.
-			multiline: true
-		};
-
-	return dump;
-}());
-
-// back compat
-QUnit.jsDump = QUnit.dump;
-
-// For browser, export only select globals
-if ( typeof window !== "undefined" ) {
-
-	// Deprecated
-	// Extend assert methods to QUnit and Global scope through Backwards compatibility
-	(function() {
-		var i,
-			assertions = Assert.prototype;
-
-		function applyCurrent( current ) {
-			return function() {
-				var assert = new Assert( QUnit.config.current );
-				current.apply( assert, arguments );
-			};
-		}
-
-		for ( i in assertions ) {
-			QUnit[ i ] = applyCurrent( assertions[ i ] );
-		}
-	})();
-
-	(function() {
-		var i, l,
-			keys = [
-				"test",
-				"module",
-				"expect",
-				"asyncTest",
-				"start",
-				"stop",
-				"ok",
-				"equal",
-				"notEqual",
-				"propEqual",
-				"notPropEqual",
-				"deepEqual",
-				"notDeepEqual",
-				"strictEqual",
-				"notStrictEqual",
-				"throws"
-			];
-
-		for ( i = 0, l = keys.length; i < l; i++ ) {
-			window[ keys[ i ] ] = QUnit[ keys[ i ] ];
-		}
-	})();
-
-	window.QUnit = QUnit;
-}
-
-// For CommonJS environments, export everything
-if ( typeof module !== "undefined" && module.exports ) {
-	module.exports = QUnit;
-}
-
-// Get a reference to the global object, like window in browsers
-}( (function() {
-	return this;
-})() ));
-
-/*istanbul ignore next */
-/*
- * Javascript Diff Algorithm
- *  By John Resig (http://ejohn.org/)
- *  Modified by Chu Alan "sprite"
- *
- * Released under the MIT license.
- *
- * More Info:
- *  http://ejohn.org/projects/javascript-diff-algorithm/
- *
- * Usage: QUnit.diff(expected, actual)
- *
- * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) == "the  quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
- */
-QUnit.diff = (function() {
-	var hasOwn = Object.prototype.hasOwnProperty;
-
-	/*jshint eqeqeq:false, eqnull:true */
-	function diff( o, n ) {
-		var i,
-			ns = {},
-			os = {};
-
-		for ( i = 0; i < n.length; i++ ) {
-			if ( !hasOwn.call( ns, n[ i ] ) ) {
-				ns[ n[ i ] ] = {
-					rows: [],
-					o: null
-				};
-			}
-			ns[ n[ i ] ].rows.push( i );
-		}
-
-		for ( i = 0; i < o.length; i++ ) {
-			if ( !hasOwn.call( os, o[ i ] ) ) {
-				os[ o[ i ] ] = {
-					rows: [],
-					n: null
-				};
-			}
-			os[ o[ i ] ].rows.push( i );
-		}
-
-		for ( i in ns ) {
-			if ( hasOwn.call( ns, i ) ) {
-				if ( ns[ i ].rows.length === 1 && hasOwn.call( os, i ) && os[ i ].rows.length === 1 ) {
-					n[ ns[ i ].rows[ 0 ] ] = {
-						text: n[ ns[ i ].rows[ 0 ] ],
-						row: os[ i ].rows[ 0 ]
-					};
-					o[ os[ i ].rows[ 0 ] ] = {
-						text: o[ os[ i ].rows[ 0 ] ],
-						row: ns[ i ].rows[ 0 ]
-					};
-				}
-			}
-		}
-
-		for ( i = 0; i < n.length - 1; i++ ) {
-			if ( n[ i ].text != null && n[ i + 1 ].text == null && n[ i ].row + 1 < o.length && o[ n[ i ].row + 1 ].text == null &&
-				n[ i + 1 ] == o[ n[ i ].row + 1 ] ) {
-
-				n[ i + 1 ] = {
-					text: n[ i + 1 ],
-					row: n[ i ].row + 1
-				};
-				o[ n[ i ].row + 1 ] = {
-					text: o[ n[ i ].row + 1 ],
-					row: i + 1
-				};
-			}
-		}
-
-		for ( i = n.length - 1; i > 0; i-- ) {
-			if ( n[ i ].text != null && n[ i - 1 ].text == null && n[ i ].row > 0 && o[ n[ i ].row - 1 ].text == null &&
-				n[ i - 1 ] == o[ n[ i ].row - 1 ] ) {
-
-				n[ i - 1 ] = {
-					text: n[ i - 1 ],
-					row: n[ i ].row - 1
-				};
-				o[ n[ i ].row - 1 ] = {
-					text: o[ n[ i ].row - 1 ],
-					row: i - 1
-				};
-			}
-		}
-
-		return {
-			o: o,
-			n: n
-		};
-	}
-
-	return function( o, n ) {
-		o = o.replace( /\s+$/, "" );
-		n = n.replace( /\s+$/, "" );
-
-		var i, pre,
-			str = "",
-			out = diff( o === "" ? [] : o.split( /\s+/ ), n === "" ? [] : n.split( /\s+/ ) ),
-			oSpace = o.match( /\s+/g ),
-			nSpace = n.match( /\s+/g );
-
-		if ( oSpace == null ) {
-			oSpace = [ " " ];
-		} else {
-			oSpace.push( " " );
-		}
-
-		if ( nSpace == null ) {
-			nSpace = [ " " ];
-		} else {
-			nSpace.push( " " );
-		}
-
-		if ( out.n.length === 0 ) {
-			for ( i = 0; i < out.o.length; i++ ) {
-				str += "<del>" + out.o[ i ] + oSpace[ i ] + "</del>";
-			}
-		} else {
-			if ( out.n[ 0 ].text == null ) {
-				for ( n = 0; n < out.o.length && out.o[ n ].text == null; n++ ) {
-					str += "<del>" + out.o[ n ] + oSpace[ n ] + "</del>";
-				}
-			}
-
-			for ( i = 0; i < out.n.length; i++ ) {
-				if ( out.n[ i ].text == null ) {
-					str += "<ins>" + out.n[ i ] + nSpace[ i ] + "</ins>";
-				} else {
-
-					// `pre` initialized at top of scope
-					pre = "";
-
-					for ( n = out.n[ i ].row + 1; n < out.o.length && out.o[ n ].text == null; n++ ) {
-						pre += "<del>" + out.o[ n ] + oSpace[ n ] + "</del>";
-					}
-					str += " " + out.n[ i ].text + nSpace[ i ] + pre;
-				}
-			}
-		}
-
-		return str;
-	};
-}());
-
-(function() {
-
-// Deprecated QUnit.init - Ref #530
-// Re-initialize the configuration options
-QUnit.init = function() {
-	var tests, banner, result, qunit,
-		config = QUnit.config;
-
-	config.stats = { all: 0, bad: 0 };
-	config.moduleStats = { all: 0, bad: 0 };
-	config.started = 0;
-	config.updateRate = 1000;
-	config.blocking = false;
-	config.autostart = true;
-	config.autorun = false;
-	config.filter = "";
-	config.queue = [];
-	config.semaphore = 1;
-
-	// Return on non-browser environments
-	// This is necessary to not break on node tests
-	if ( typeof window === "undefined" ) {
-		return;
-	}
-
-	qunit = id( "qunit" );
-	if ( qunit ) {
-		qunit.innerHTML =
-			"<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
-			"<h2 id='qunit-banner'></h2>" +
-			"<div id='qunit-testrunner-toolbar'></div>" +
-			"<h2 id='qunit-userAgent'></h2>" +
-			"<ol id='qunit-tests'></ol>";
-	}
-
-	tests = id( "qunit-tests" );
-	banner = id( "qunit-banner" );
-	result = id( "qunit-testresult" );
-
-	if ( tests ) {
-		tests.innerHTML = "";
-	}
-
-	if ( banner ) {
-		banner.className = "";
-	}
-
-	if ( result ) {
-		result.parentNode.removeChild( result );
-	}
-
-	if ( tests ) {
-		result = document.createElement( "p" );
-		result.id = "qunit-testresult";
-		result.className = "result";
-		tests.parentNode.insertBefore( result, tests );
-		result.innerHTML = "Running...<br/>&nbsp;";
-	}
-};
-
-// Resets the test setup. Useful for tests that modify the DOM.
-/*
-DEPRECATED: Use multiple tests instead of resetting inside a test.
-Use testStart or testDone for custom cleanup.
-This method will throw an error in 2.0, and will be removed in 2.1
-*/
-QUnit.reset = function() {
-
-	// Return on non-browser environments
-	// This is necessary to not break on node tests
-	if ( typeof window === "undefined" ) {
-		return;
-	}
-
-	var fixture = id( "qunit-fixture" );
-	if ( fixture ) {
-		fixture.innerHTML = config.fixture;
-	}
-};
-
-// Don't load the HTML Reporter on non-Browser environments
-if ( typeof window === "undefined" ) {
-	return;
-}
-
-var config = QUnit.config,
-	hasOwn = Object.prototype.hasOwnProperty,
-	defined = {
-		document: typeof window.document !== "undefined",
-		sessionStorage: (function() {
-			var x = "qunit-test-string";
-			try {
-				sessionStorage.setItem( x, x );
-				sessionStorage.removeItem( x );
-				return true;
-			} catch ( e ) {
-				return false;
-			}
-		}())
-	};
-
-/**
-* Escape text for attribute or text content.
-*/
-function escapeText( s ) {
-	if ( !s ) {
-		return "";
-	}
-	s = s + "";
-
-	// Both single quotes and double quotes (for attributes)
-	return s.replace( /['"<>&]/g, function( s ) {
-		switch ( s ) {
-		case "'":
-			return "&#039;";
-		case "\"":
-			return "&quot;";
-		case "<":
-			return "&lt;";
-		case ">":
-			return "&gt;";
-		case "&":
-			return "&amp;";
-		}
-	});
-}
-
-/**
- * @param {HTMLElement} elem
- * @param {string} type
- * @param {Function} fn
- */
-function addEvent( elem, type, fn ) {
-	if ( elem.addEventListener ) {
-
-		// Standards-based browsers
-		elem.addEventListener( type, fn, false );
-	} else if ( elem.attachEvent ) {
-
-		// support: IE <9
-		elem.attachEvent( "on" + type, fn );
-	}
-}
-
-/**
- * @param {Array|NodeList} elems
- * @param {string} type
- * @param {Function} fn
- */
-function addEvents( elems, type, fn ) {
-	var i = elems.length;
-	while ( i-- ) {
-		addEvent( elems[ i ], type, fn );
-	}
-}
-
-function hasClass( elem, name ) {
-	return ( " " + elem.className + " " ).indexOf( " " + name + " " ) >= 0;
-}
-
-function addClass( elem, name ) {
-	if ( !hasClass( elem, name ) ) {
-		elem.className += ( elem.className ? " " : "" ) + name;
-	}
-}
-
-function toggleClass( elem, name ) {
-	if ( hasClass( elem, name ) ) {
-		removeClass( elem, name );
-	} else {
-		addClass( elem, name );
-	}
-}
-
-function removeClass( elem, name ) {
-	var set = " " + elem.className + " ";
-
-	// Class name may appear multiple times
-	while ( set.indexOf( " " + name + " " ) >= 0 ) {
-		set = set.replace( " " + name + " ", " " );
-	}
-
-	// trim for prettiness
-	elem.className = typeof set.trim === "function" ? set.trim() : set.replace( /^\s+|\s+$/g, "" );
-}
-
-function id( name ) {
-	return defined.document && document.getElementById && document.getElementById( name );
-}
-
-function getUrlConfigHtml() {
-	var i, j, val,
-		escaped, escapedTooltip,
-		selection = false,
-		len = config.urlConfig.length,
-		urlConfigHtml = "";
-
-	for ( i = 0; i < len; i++ ) {
-		val = config.urlConfig[ i ];
-		if ( typeof val === "string" ) {
-			val = {
-				id: val,
-				label: val
-			};
-		}
-
-		escaped = escapeText( val.id );
-		escapedTooltip = escapeText( val.tooltip );
-
-		config[ val.id ] = QUnit.urlParams[ val.id ];
-		if ( !val.value || typeof val.value === "string" ) {
-			urlConfigHtml += "<input id='qunit-urlconfig-" + escaped +
-				"' name='" + escaped + "' type='checkbox'" +
-				( val.value ? " value='" + escapeText( val.value ) + "'" : "" ) +
-				( config[ val.id ] ? " checked='checked'" : "" ) +
-				" title='" + escapedTooltip + "'><label for='qunit-urlconfig-" + escaped +
-				"' title='" + escapedTooltip + "'>" + val.label + "</label>";
-		} else {
-			urlConfigHtml += "<label for='qunit-urlconfig-" + escaped +
-				"' title='" + escapedTooltip + "'>" + val.label +
-				": </label><select id='qunit-urlconfig-" + escaped +
-				"' name='" + escaped + "' title='" + escapedTooltip + "'><option></option>";
-
-			if ( QUnit.is( "array", val.value ) ) {
-				for ( j = 0; j < val.value.length; j++ ) {
-					escaped = escapeText( val.value[ j ] );
-					urlConfigHtml += "<option value='" + escaped + "'" +
-						( config[ val.id ] === val.value[ j ] ?
-							( selection = true ) && " selected='selected'" : "" ) +
-						">" + escaped + "</option>";
-				}
-			} else {
-				for ( j in val.value ) {
-					if ( hasOwn.call( val.value, j ) ) {
-						urlConfigHtml += "<option value='" + escapeText( j ) + "'" +
-							( config[ val.id ] === j ?
-								( selection = true ) && " selected='selected'" : "" ) +
-							">" + escapeText( val.value[ j ] ) + "</option>";
-					}
-				}
-			}
-			if ( config[ val.id ] && !selection ) {
-				escaped = escapeText( config[ val.id ] );
-				urlConfigHtml += "<option value='" + escaped +
-					"' selected='selected' disabled='disabled'>" + escaped + "</option>";
-			}
-			urlConfigHtml += "</select>";
-		}
-	}
-
-	return urlConfigHtml;
-}
-
-function toolbarUrlConfigContainer() {
-	var urlConfigContainer = document.createElement( "span" );
-
-	urlConfigContainer.innerHTML = getUrlConfigHtml();
-
-	// For oldIE support:
-	// * Add handlers to the individual elements instead of the container
-	// * Use "click" instead of "change" for checkboxes
-	// * Fallback from event.target to event.srcElement
-	addEvents( urlConfigContainer.getElementsByTagName( "input" ), "click", function( event ) {
-		var params = {},
-			target = event.target || event.srcElement;
-		params[ target.name ] = target.checked ?
-			target.defaultValue || true :
-			undefined;
-		window.location = QUnit.url( params );
-	});
-	addEvents( urlConfigContainer.getElementsByTagName( "select" ), "change", function( event ) {
-		var params = {},
-			target = event.target || event.srcElement;
-		params[ target.name ] = target.options[ target.selectedIndex ].value || undefined;
-		window.location = QUnit.url( params );
-	});
-
-	return urlConfigContainer;
-}
-
-function getModuleNames() {
-	var i,
-		moduleNames = [];
-
-	for ( i in config.modules ) {
-		if ( config.modules.hasOwnProperty( i ) ) {
-			moduleNames.push( i );
-		}
-	}
-
-	moduleNames.sort(function( a, b ) {
-		return a.localeCompare( b );
-	});
-
-	return moduleNames;
-}
-
-function toolbarModuleFilterHtml() {
-	var i,
-		moduleFilterHtml = "",
-		moduleNames = getModuleNames();
-
-	if ( moduleNames.length <= 1 ) {
-		return false;
-	}
-
-	moduleFilterHtml += "<label for='qunit-modulefilter'>Module: </label>" +
-		"<select id='qunit-modulefilter' name='modulefilter'><option value='' " +
-		( config.module === undefined ? "selected='selected'" : "" ) +
-		">< All Modules ></option>";
-
-	for ( i = 0; i < moduleNames.length; i++ ) {
-		moduleFilterHtml += "<option value='" +
-			escapeText( encodeURIComponent( moduleNames[ i ] ) ) + "' " +
-			( config.module === moduleNames[ i ] ? "selected='selected'" : "" ) +
-			">" + escapeText( moduleNames[ i ] ) + "</option>";
-	}
-	moduleFilterHtml += "</select>";
-
-	return moduleFilterHtml;
-}
-
-function toolbarModuleFilter() {
-	var moduleFilter = document.createElement( "span" ),
-		moduleFilterHtml = toolbarModuleFilterHtml();
-
-	if ( !moduleFilterHtml ) {
-		return false;
-	}
-
-	moduleFilter.setAttribute( "id", "qunit-modulefilter-container" );
-	moduleFilter.innerHTML = moduleFilterHtml;
-
-	addEvent( moduleFilter.lastChild, "change", function() {
-		var selectBox = moduleFilter.getElementsByTagName( "select" )[ 0 ],
-			selectedModule = decodeURIComponent( selectBox.options[ selectBox.selectedIndex ].value );
-
-		window.location = QUnit.url({
-			module: ( selectedModule === "" ) ? undefined : selectedModule,
-
-			// Remove any existing filters
-			filter: undefined,
-			testNumber: undefined
-		});
-	});
-
-	return moduleFilter;
-}
-
-function toolbarFilter() {
-	var testList = id( "qunit-tests" ),
-		filter = document.createElement( "input" );
-
-	filter.type = "checkbox";
-	filter.id = "qunit-filter-pass";
-
-	addEvent( filter, "click", function() {
-		if ( filter.checked ) {
-			addClass( testList, "hidepass" );
-			if ( defined.sessionStorage ) {
-				sessionStorage.setItem( "qunit-filter-passed-tests", "true" );
-			}
-		} else {
-			removeClass( testList, "hidepass" );
-			if ( defined.sessionStorage ) {
-				sessionStorage.removeItem( "qunit-filter-passed-tests" );
-			}
-		}
-	});
-
-	if ( config.hidepassed || defined.sessionStorage &&
-			sessionStorage.getItem( "qunit-filter-passed-tests" ) ) {
-		filter.checked = true;
-
-		addClass( testList, "hidepass" );
-	}
-
-	return filter;
-}
-
-function toolbarLabel() {
-	var label = document.createElement( "label" );
-	label.setAttribute( "for", "qunit-filter-pass" );
-	label.setAttribute( "title", "Only show tests and assertions that fail. Stored in sessionStorage." );
-	label.innerHTML = "Hide passed tests";
-
-	return label;
-}
-
-function appendToolbar() {
-	var moduleFilter,
-		toolbar = id( "qunit-testrunner-toolbar" );
-
-	if ( toolbar ) {
-		toolbar.appendChild( toolbarFilter() );
-		toolbar.appendChild( toolbarLabel() );
-		toolbar.appendChild( toolbarUrlConfigContainer() );
-
-		moduleFilter = toolbarModuleFilter();
-		if ( moduleFilter ) {
-			toolbar.appendChild( moduleFilter );
-		}
-	}
-}
-
-function appendBanner() {
-	var banner = id( "qunit-banner" );
-
-	if ( banner ) {
-		banner.className = "";
-		banner.innerHTML = "<a href='" +
-			QUnit.url({ filter: undefined, module: undefined, testNumber: undefined }) +
-			"'>" + banner.innerHTML + "</a> ";
-	}
-}
-
-function appendTestResults() {
-	var tests = id( "qunit-tests" ),
-		result = id( "qunit-testresult" );
-
-	if ( result ) {
-		result.parentNode.removeChild( result );
-	}
-
-	if ( tests ) {
-		tests.innerHTML = "";
-		result = document.createElement( "p" );
-		result.id = "qunit-testresult";
-		result.className = "result";
-		tests.parentNode.insertBefore( result, tests );
-		result.innerHTML = "Running...<br>&nbsp;";
-	}
-}
-
-function storeFixture() {
-	var fixture = id( "qunit-fixture" );
-	if ( fixture ) {
-		config.fixture = fixture.innerHTML;
-	}
-}
-
-function appendUserAgent() {
-	var userAgent = id( "qunit-userAgent" );
-	if ( userAgent ) {
-		userAgent.innerHTML = navigator.userAgent;
-	}
-}
-
-// HTML Reporter initialization and load
-QUnit.begin(function() {
-	var qunit = id( "qunit" );
-
-	if ( qunit ) {
-		qunit.innerHTML =
-		"<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
-		"<h2 id='qunit-banner'></h2>" +
-		"<div id='qunit-testrunner-toolbar'></div>" +
-		"<h2 id='qunit-userAgent'></h2>" +
-		"<ol id='qunit-tests'></ol>";
-	}
-
-	appendBanner();
-	appendTestResults();
-	appendUserAgent();
-	appendToolbar();
-	storeFixture();
-});
-
-QUnit.done(function( details ) {
-	var i, key,
-		banner = id( "qunit-banner" ),
-		tests = id( "qunit-tests" ),
-		html = [
-			"Tests completed in ",
-			details.runtime,
-			" milliseconds.<br>",
-			"<span class='passed'>",
-			details.passed,
-			"</span> assertions of <span class='total'>",
-			details.total,
-			"</span> passed, <span class='failed'>",
-			details.failed,
-			"</span> failed."
-		].join( "" );
-
-	if ( banner ) {
-		banner.className = details.failed ? "qunit-fail" : "qunit-pass";
-	}
-
-	if ( tests ) {
-		id( "qunit-testresult" ).innerHTML = html;
-	}
-
-	if ( config.altertitle && defined.document && document.title ) {
-
-		// show ✖ for good, ✔ for bad suite result in title
-		// use escape sequences in case file gets loaded with non-utf-8-charset
-		document.title = [
-			( details.failed ? "\u2716" : "\u2714" ),
-			document.title.replace( /^[\u2714\u2716] /i, "" )
-		].join( " " );
-	}
-
-	// clear own sessionStorage items if all tests passed
-	if ( config.reorder && defined.sessionStorage && details.failed === 0 ) {
-		for ( i = 0; i < sessionStorage.length; i++ ) {
-			key = sessionStorage.key( i++ );
-			if ( key.indexOf( "qunit-test-" ) === 0 ) {
-				sessionStorage.removeItem( key );
-			}
-		}
-	}
-
-	// scroll back to top to show results
-	if ( config.scrolltop && window.scrollTo ) {
-		window.scrollTo( 0, 0 );
-	}
-});
-
-function getNameHtml( name, module ) {
-	var nameHtml = "";
-
-	if ( module ) {
-		nameHtml = "<span class='module-name'>" + escapeText( module ) + "</span>: ";
-	}
-
-	nameHtml += "<span class='test-name'>" + escapeText( name ) + "</span>";
-
-	return nameHtml;
-}
-
-QUnit.testStart(function( details ) {
-	var a, b, li, running, assertList,
-		name = getNameHtml( details.name, details.module ),
-		tests = id( "qunit-tests" );
-
-	if ( tests ) {
-		b = document.createElement( "strong" );
-		b.innerHTML = name;
-
-		a = document.createElement( "a" );
-		a.innerHTML = "Rerun";
-		a.href = QUnit.url({ testNumber: details.testNumber });
-
-		li = document.createElement( "li" );
-		li.appendChild( b );
-		li.appendChild( a );
-		li.className = "running";
-		li.id = "qunit-test-output" + details.testNumber;
-
-		assertList = document.createElement( "ol" );
-		assertList.className = "qunit-assert-list";
-
-		li.appendChild( assertList );
-
-		tests.appendChild( li );
-	}
-
-	running = id( "qunit-testresult" );
-	if ( running ) {
-		running.innerHTML = "Running: <br>" + name;
-	}
-
-});
-
-QUnit.log(function( details ) {
-	var assertList, assertLi,
-		message, expected, actual,
-		testItem = id( "qunit-test-output" + details.testNumber );
-
-	if ( !testItem ) {
-		return;
-	}
-
-	message = escapeText( details.message ) || ( details.result ? "okay" : "failed" );
-	message = "<span class='test-message'>" + message + "</span>";
-
-	// pushFailure doesn't provide details.expected
-	// when it calls, it's implicit to also not show expected and diff stuff
-	// Also, we need to check details.expected existence, as it can exist and be undefined
-	if ( !details.result && hasOwn.call( details, "expected" ) ) {
-		expected = escapeText( QUnit.dump.parse( details.expected ) );
-		actual = escapeText( QUnit.dump.parse( details.actual ) );
-		message += "<table><tr class='test-expected'><th>Expected: </th><td><pre>" +
-			expected +
-			"</pre></td></tr>";
-
-		if ( actual !== expected ) {
-			message += "<tr class='test-actual'><th>Result: </th><td><pre>" +
-				actual + "</pre></td></tr>" +
-				"<tr class='test-diff'><th>Diff: </th><td><pre>" +
-				QUnit.diff( expected, actual ) + "</pre></td></tr>";
-		}
-
-		if ( details.source ) {
-			message += "<tr class='test-source'><th>Source: </th><td><pre>" +
-				escapeText( details.source ) + "</pre></td></tr>";
-		}
-
-		message += "</table>";
-
-	// this occours when pushFailure is set and we have an extracted stack trace
-	} else if ( !details.result && details.source ) {
-		message += "<table>" +
-			"<tr class='test-source'><th>Source: </th><td><pre>" +
-			escapeText( details.source ) + "</pre></td></tr>" +
-			"</table>";
-	}
-
-	assertList = testItem.getElementsByTagName( "ol" )[ 0 ];
-
-	assertLi = document.createElement( "li" );
-	assertLi.className = details.result ? "pass" : "fail";
-	assertLi.innerHTML = message;
-	assertList.appendChild( assertLi );
-});
-
-QUnit.testDone(function( details ) {
-	var testTitle, time, testItem, assertList,
-		good, bad, testCounts,
-		tests = id( "qunit-tests" );
-
-	// QUnit.reset() is deprecated and will be replaced for a new
-	// fixture reset function on QUnit 2.0/2.1.
-	// It's still called here for backwards compatibility handling
-	QUnit.reset();
-
-	if ( !tests ) {
-		return;
-	}
-
-	testItem = id( "qunit-test-output" + details.testNumber );
-	assertList = testItem.getElementsByTagName( "ol" )[ 0 ];
-
-	good = details.passed;
-	bad = details.failed;
-
-	// store result when possible
-	if ( config.reorder && defined.sessionStorage ) {
-		if ( bad ) {
-			sessionStorage.setItem( "qunit-test-" + details.module + "-" + details.name, bad );
-		} else {
-			sessionStorage.removeItem( "qunit-test-" + details.module + "-" + details.name );
-		}
-	}
-
-	if ( bad === 0 ) {
-		addClass( assertList, "qunit-collapsed" );
-	}
-
-	// testItem.firstChild is the test name
-	testTitle = testItem.firstChild;
-
-	testCounts = bad ?
-		"<b class='failed'>" + bad + "</b>, " + "<b class='passed'>" + good + "</b>, " :
-		"";
-
-	testTitle.innerHTML += " <b class='counts'>(" + testCounts +
-		details.assertions.length + ")</b>";
-
-	addEvent( testTitle, "click", function() {
-		toggleClass( assertList, "qunit-collapsed" );
-	});
-
-	time = document.createElement( "span" );
-	time.className = "runtime";
-	time.innerHTML = details.runtime + " ms";
-
-	testItem.className = bad ? "fail" : "pass";
-
-	testItem.insertBefore( time, assertList );
-});
-
-if ( !defined.document || document.readyState === "complete" ) {
-	config.autorun = true;
-}
-
-if ( defined.document ) {
-	addEvent( window, "load", QUnit.load );
-}
-
-})();


[22/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_apps_controller_test.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_apps_controller_test.js b/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_apps_controller_test.js
deleted file mode 100644
index 3462d22..0000000
--- a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_apps_controller_test.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-moduleFor('controller:sliderApps', 'App.SliderAppsController', {
-
-  setup: function () {
-    sinon.stub(Bootstrap.ModalManager, 'open', Em.K);
-  },
-
-  teardown: function () {
-    Bootstrap.ModalManager.open.restore();
-  }
-
-});
-
-test('showUnavailableAppsPopup', function () {
-
-  var cases = [
-      {
-        message: 'message',
-        result: 'message',
-        title: 'errorMessage property should be set'
-      },
-      {
-        result: Em.I18n.t('slider.apps.undefined.issue'),
-        title: 'default error message'
-      }
-    ],
-    controller = this.subject({
-      errorMessage: null
-    });
-
-  cases.forEach(function (item) {
-
-    Em.run(function () {
-      controller.showUnavailableAppsPopup(item.message);
-    });
-
-    equal(controller.get('errorMessage'), item.result, item.title);
-
-  });
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_controller_test.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_controller_test.js b/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_controller_test.js
deleted file mode 100644
index e31d266..0000000
--- a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_controller_test.js
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-moduleFor('controller:slider', 'App.SliderController', {
-
-  setup: function () {
-    App.setProperties({
-      metricsHost: null,
-      metricsPort: null,
-      metricsLibPath: null
-    });
-    Ember.run(App, App.advanceReadiness);
-  },
-
-  teardown: function () {
-    App.reset();
-  }
-
-});
-
-var properties = [
-  Em.Object.create({
-    viewConfigName: 'site.global.metric_collector_lib',
-    value: 'file:///usr/lib/ambari-metrics-hadoop-sink/ambari-metrics-hadoop-sink.jar'
-  }),
-  Em.Object.create({
-    viewConfigName: 'site.global.metric_collector_host',
-    value: 'h2'
-  }),
-  Em.Object.create({
-    viewConfigName: 'site.global.metric_collector_port',
-    value: '6188'
-  })
-];
-
-test('getViewDisplayParametersSuccessCallback', function () {
-
-  var sliderController = this.subject({});
-  Em.run(function () {
-    sliderController.getViewDisplayParametersSuccessCallback({
-      "ViewInstanceInfo" : {
-        "description" : "description s1",
-        "label" : "display s1",
-        "instance_data": {
-          "java.home": "/usr/jdk64/jdk1.7.0_45",
-          "slider.user": "admin"
-        }
-      }
-    })
-  });
-  equal(App.get('label'), 'display s1', 'valid label is set');
-  equal(App.get('description'), 'description s1', 'valid description is set');
-  equal(App.get('javaHome'), '/usr/jdk64/jdk1.7.0_45', 'valid default java_home property is set');
-  equal(App.get('sliderUser'), 'admin', 'valid sliderUser is set');
-
-});
-
-test('getParametersFromViewPropertiesSuccessCallback', function () {
-
-  var controller = this.subject();
-
-  Em.run(function () {
-    sinon.stub(App.SliderApp.store, 'all').returns(properties);
-    controller.getParametersFromViewPropertiesSuccessCallback({
-      parameters: {
-        'site.global.metric_collector_lib': 'file:///usr/lib/ambari-metrics-hadoop-sink/ambari-metrics-hadoop-sink.jar',
-        'site.global.metric_collector_host': 'h2',
-        'site.global.metric_collector_port': '6188'
-      },
-      validations: [{}, {}]
-    });
-    App.SliderApp.store.all.restore();
-  });
-
-  equal(App.get('metricsHost'), 'h2', 'should set metrics server host');
-  equal(App.get('metricsPort'), '6188', 'should set metrics server port');
-  equal(App.get('metricsLibPath'), 'file:///usr/lib/ambari-metrics-hadoop-sink/ambari-metrics-hadoop-sink.jar', 'should set metrics lib path');
-
-});
-
- test('initMetricsServerProperties', function () {
-
-   var controller = this.subject();
-
-   Em.run(function () {
-     sinon.stub(App.SliderApp.store, 'all').returns(properties);
-     controller.initMetricsServerProperties();
-     App.SliderApp.store.all.restore();
-   });
-
-   equal(App.get('metricsHost'), 'h2', 'should set metrics server host');
-   equal(App.get('metricsPort'), '6188', 'should set metrics server port');
-   equal(App.get('metricsLibPath'), 'file:///usr/lib/ambari-metrics-hadoop-sink/ambari-metrics-hadoop-sink.jar', 'should set metrics lib path');
-
- });
-
-test('finishSliderConfiguration', function () {
-
-  var cases = [
-      {
-        validations: [],
-        viewEnabled: true,
-        title: 'view enabled'
-      },
-      {
-        validations: [{}, {}],
-        viewEnabled: false,
-        title: 'view disabled'
-      }
-    ],
-    controller = this.subject();
-
-  cases.forEach(function (item) {
-
-    Em.run(function () {
-      controller.finishSliderConfiguration({
-        validations: item.validations
-      });
-    });
-
-    equal(App.get('viewEnabled'), item.viewEnabled, item.title);
-
-  });
-
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/test/unit/mappers/slider_apps_mapper_test.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/test/unit/mappers/slider_apps_mapper_test.js b/contrib/views/slider/src/main/resources/ui/test/unit/mappers/slider_apps_mapper_test.js
deleted file mode 100644
index 3e34c953..0000000
--- a/contrib/views/slider/src/main/resources/ui/test/unit/mappers/slider_apps_mapper_test.js
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-QUnit.module('App.SliderAppsMapper', {
-
-  setup: function () {
-    App.SliderApp.store = App.__container__.lookup('store:main');
-  },
-
-  teardown: function () {
-    App.reset();
-  }
-
-});
-
-test('parseQuickLinks', function () {
-
-  var mapper = App.SliderAppsMapper;
-
-  Em.run(function () {
-    App.SliderApp.store.all = function () {
-      return [
-        Em.Object.create({
-          viewConfigName: 'yarn.rm.webapp.url',
-          value: 'host'
-        })
-      ]
-    };
-    App.SliderApp.store.pushMany = function (model, record) {
-      mapper.set('result', record);
-    };
-    mapper.parseQuickLinks({
-      id: '1'
-    })
-  });
-
-  equal(mapper.get('result')[0].get('url'), 'http://host/cluster/app/application_1', 'valid YARN application URL formed');
-  equal(mapper.get('result')[0].get('id'), 'YARN application 1', 'model id set correctly');
-
-});
-
-test('parse | add/remove apps', function () {
-
-  Em.run(function () {
-
-    App.SliderAppsMapper.parse({
-      apps: [
-        {id: '1', type: 't1'},
-        {id: '2', type: 't2'}
-      ]
-    });
-
-  });
-
-  deepEqual(App.SliderApp.store.all('sliderApp').mapBy('id'), ['1', '2'], 'Mapped all apps');
-
-  Em.run(function () {
-
-    App.SliderAppsMapper.parse({
-      apps: [
-        {id: '2', type: 't2'},
-        {id: '3', type: 't3'}
-      ]
-    });
-
-  });
-
-  deepEqual(App.SliderApp.store.all('sliderApp').mapBy('id'), ['2', '3'], 'Delete not-existing app and add new');
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/test/unit/models/slider_app_component_test.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/test/unit/models/slider_app_component_test.js b/contrib/views/slider/src/main/resources/ui/test/unit/models/slider_app_component_test.js
deleted file mode 100644
index 82681e2..0000000
--- a/contrib/views/slider/src/main/resources/ui/test/unit/models/slider_app_component_test.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-moduleForModel('sliderAppComponent', 'App.SliderAppComponent', {
-
-  needs: [
-    'model:sliderApp'
-  ]
-
-});
-
-test('isRunning', function () {
-
-  var sliderAppComponent = this.subject({status: 'Running'});
-  equal(sliderAppComponent.get('isRunning'), true, 'should be true if status is Running');
-
-});
-
-test('url', function () {
-
-  var host = 'host1',
-    containerId = 'id1',
-    sliderAppComponent = this.subject({host: host, containerId: containerId});
-  equal(sliderAppComponent.get('url'), "http://" + host + ":8042/node/container/" + containerId);
-
-  Em.run(function () {
-    sliderAppComponent.set('host', null);
-  });
-  equal(sliderAppComponent.get('url'), null, 'should be null if host not set');
-
-  Em.run(function () {
-    sliderAppComponent.setProperties({host: host, containerId: null});
-  });
-  equal(sliderAppComponent.get('url'), null, 'should be null if containerId not set');
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/test/unit/models/slider_app_test.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/test/unit/models/slider_app_test.js b/contrib/views/slider/src/main/resources/ui/test/unit/models/slider_app_test.js
deleted file mode 100644
index 2a7b56e..0000000
--- a/contrib/views/slider/src/main/resources/ui/test/unit/models/slider_app_test.js
+++ /dev/null
@@ -1,95 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-moduleForModel('sliderApp', 'App.SliderApp', {
-
-  needs: [
-    'model:sliderAppType',
-    'model:sliderAppComponent',
-    'model:quickLink',
-    'model:sliderAppAlert',
-    'model:typedProperty'
-  ],
-
-  setup: function () {
-    App.set('metricsHost', null);
-  },
-
-  teardown: function () {
-    App.set('metricsHost', null);
-  }
-
-});
-
-test('doNotShowComponentsAndAlerts', function () {
-
-  var sliderApp = this.subject({name: 'p1', status: 'FROZEN'});
-
-  equal(sliderApp.get('doNotShowComponentsAndAlerts'), true, 'Should be true if status is FROZEN');
-
-  Em.run(function () {
-    sliderApp.set('status', 'FAILED');
-  });
-  equal(sliderApp.get('doNotShowComponentsAndAlerts'), true, 'Should be true if status is FAILED');
-
-});
-
-
-test('showMetrics', function () {
-
-  var sliderApp = this.subject({name: 'p1', configs: {}, supportedMetricNames: ''});
-  equal(sliderApp.get('showMetrics'), false, 'should be false if supportedMetricNames is not provided');
-
-  Em.run(function () {
-    App.set('metricsHost', 'some_host');
-    sliderApp.set('supportedMetricNames', 'some');
-  });
-  equal(sliderApp.get('showMetrics'), true, 'should be true if App.metricsHost is provided');
-
-  Em.run(function () {
-    App.set('metricsHost', null);
-    sliderApp.set('status', App.SliderApp.Status.running);
-  });
-  equal(sliderApp.get('showMetrics'), true, 'should be true if status is RUNNING');
-
-});
-
-test('mapObject', function () {
-  var sliderApp = this.subject(),
-    longString = new Array(102).join('1'),
-    configs = {
-      n1: 'v1',
-      n2: 'v2',
-      n3: 'v3\nv3',
-      n4: longString
-    },
-    expected = [
-      {key: 'n1', value: 'v1', isMultiline: false},
-      {key: 'n2', value: 'v2', isMultiline: false},
-      {key: 'n3', value: 'v3\nv3', isMultiline: true},
-      {key: 'n4', value: longString, isMultiline: true}
-    ],
-    result;
-
-
-  Em.run(function() {
-    result = sliderApp.mapObject(configs);
-  });
-  deepEqual(result, expected, 'should map configs to array');
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/test/unit/views/common/table_view_test.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/test/unit/views/common/table_view_test.js b/contrib/views/slider/src/main/resources/ui/test/unit/views/common/table_view_test.js
deleted file mode 100644
index dd198ac..0000000
--- a/contrib/views/slider/src/main/resources/ui/test/unit/views/common/table_view_test.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-moduleFor('view:table', 'App.TableView');
-
-test('clearFilters', function () {
-
-  var view = this.subject({
-    content: [{}],
-    filteredContent: [{}],
-    endIndex: 2
-  });
-
-  Em.run(function () {
-    view.clearAllFilters();
-  });
-
-  equal(view.get('pageContent.length'), 1, 'all content items should be displayed');
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/test/unit/views/slider_app/summary_view_test.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/test/unit/views/slider_app/summary_view_test.js b/contrib/views/slider/src/main/resources/ui/test/unit/views/slider_app/summary_view_test.js
deleted file mode 100644
index 7f1ebae..0000000
--- a/contrib/views/slider/src/main/resources/ui/test/unit/views/slider_app/summary_view_test.js
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-moduleFor('view:SliderAppSummary', 'App.SliderAppSummaryView', {
-
-  needs: [
-    'view:AppMetric',
-    'view:Chart'
-  ],
-
-  setup: function () {
-    Em.run(App, App.advanceReadiness);
-  },
-
-  teardown: function () {
-    App.reset();
-  }
-
-});
-
-test('graphsNotEmpty', function () {
-
-  var sliderAppSummaryView = this.subject({
-    controller: {
-      model: Em.Object.create({
-        supportedMetricNames: ''
-      })
-    }
-  });
-  Em.run(function () {
-    sliderAppSummaryView.set('controller.model.supportedMetricNames', 'firstMetric,secondMetric');
-    var v = sliderAppSummaryView.createChildView(sliderAppSummaryView.get('graphs')[0].view);
-    v._refreshGraph({
-      "metrics": {
-        "firstMetric": [
-          [
-            5.0,
-            1401351555
-          ]
-        ]}
-    });
-    sliderAppSummaryView.createChildView(sliderAppSummaryView.get('graphs')[1].view);
-  });
-  ok(sliderAppSummaryView.get('graphsNotEmpty'), 'One graph has metrics');
-
-  Em.run(function () {
-    var v = sliderAppSummaryView.createChildView(sliderAppSummaryView.get('graphs')[0].view);
-    v._refreshGraph({
-      "metrics": {}
-    });
-  });
-  equal(sliderAppSummaryView.get('graphsNotEmpty'), false, 'No one graph has metrics');
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bootstrap.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bootstrap.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bootstrap.js
deleted file mode 100644
index 1684fcb..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bootstrap.js
+++ /dev/null
@@ -1,1951 +0,0 @@
-/*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') }
-
-/* ========================================================================
- * Bootstrap: transition.js v3.1.1
- * http://getbootstrap.com/javascript/#transitions
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
-  // ============================================================
-
-  function transitionEnd() {
-    var el = document.createElement('bootstrap')
-
-    var transEndEventNames = {
-      'WebkitTransition' : 'webkitTransitionEnd',
-      'MozTransition'    : 'transitionend',
-      'OTransition'      : 'oTransitionEnd otransitionend',
-      'transition'       : 'transitionend'
-    }
-
-    for (var name in transEndEventNames) {
-      if (el.style[name] !== undefined) {
-        return { end: transEndEventNames[name] }
-      }
-    }
-
-    return false // explicit for ie8 (  ._.)
-  }
-
-  // http://blog.alexmaccaw.com/css-transitions
-  $.fn.emulateTransitionEnd = function (duration) {
-    var called = false, $el = this
-    $(this).one($.support.transition.end, function () { called = true })
-    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
-    setTimeout(callback, duration)
-    return this
-  }
-
-  $(function () {
-    $.support.transition = transitionEnd()
-  })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: alert.js v3.1.1
- * http://getbootstrap.com/javascript/#alerts
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // ALERT CLASS DEFINITION
-  // ======================
-
-  var dismiss = '[data-dismiss="alert"]'
-  var Alert   = function (el) {
-    $(el).on('click', dismiss, this.close)
-  }
-
-  Alert.prototype.close = function (e) {
-    var $this    = $(this)
-    var selector = $this.attr('data-target')
-
-    if (!selector) {
-      selector = $this.attr('href')
-      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
-    }
-
-    var $parent = $(selector)
-
-    if (e) e.preventDefault()
-
-    if (!$parent.length) {
-      $parent = $this.hasClass('alert') ? $this : $this.parent()
-    }
-
-    $parent.trigger(e = $.Event('close.bs.alert'))
-
-    if (e.isDefaultPrevented()) return
-
-    $parent.removeClass('in')
-
-    function removeElement() {
-      $parent.trigger('closed.bs.alert').remove()
-    }
-
-    $.support.transition && $parent.hasClass('fade') ?
-      $parent
-        .one($.support.transition.end, removeElement)
-        .emulateTransitionEnd(150) :
-      removeElement()
-  }
-
-
-  // ALERT PLUGIN DEFINITION
-  // =======================
-
-  var old = $.fn.alert
-
-  $.fn.alert = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-      var data  = $this.data('bs.alert')
-
-      if (!data) $this.data('bs.alert', (data = new Alert(this)))
-      if (typeof option == 'string') data[option].call($this)
-    })
-  }
-
-  $.fn.alert.Constructor = Alert
-
-
-  // ALERT NO CONFLICT
-  // =================
-
-  $.fn.alert.noConflict = function () {
-    $.fn.alert = old
-    return this
-  }
-
-
-  // ALERT DATA-API
-  // ==============
-
-  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: button.js v3.1.1
- * http://getbootstrap.com/javascript/#buttons
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // BUTTON PUBLIC CLASS DEFINITION
-  // ==============================
-
-  var Button = function (element, options) {
-    this.$element  = $(element)
-    this.options   = $.extend({}, Button.DEFAULTS, options)
-    this.isLoading = false
-  }
-
-  Button.DEFAULTS = {
-    loadingText: 'loading...'
-  }
-
-  Button.prototype.setState = function (state) {
-    var d    = 'disabled'
-    var $el  = this.$element
-    var val  = $el.is('input') ? 'val' : 'html'
-    var data = $el.data()
-
-    state = state + 'Text'
-
-    if (!data.resetText) $el.data('resetText', $el[val]())
-
-    $el[val](data[state] || this.options[state])
-
-    // push to event loop to allow forms to submit
-    setTimeout($.proxy(function () {
-      if (state == 'loadingText') {
-        this.isLoading = true
-        $el.addClass(d).attr(d, d)
-      } else if (this.isLoading) {
-        this.isLoading = false
-        $el.removeClass(d).removeAttr(d)
-      }
-    }, this), 0)
-  }
-
-  Button.prototype.toggle = function () {
-    var changed = true
-    var $parent = this.$element.closest('[data-toggle="buttons"]')
-
-    if ($parent.length) {
-      var $input = this.$element.find('input')
-      if ($input.prop('type') == 'radio') {
-        if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
-        else $parent.find('.active').removeClass('active')
-      }
-      if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
-    }
-
-    if (changed) this.$element.toggleClass('active')
-  }
-
-
-  // BUTTON PLUGIN DEFINITION
-  // ========================
-
-  var old = $.fn.button
-
-  $.fn.button = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.button')
-      var options = typeof option == 'object' && option
-
-      if (!data) $this.data('bs.button', (data = new Button(this, options)))
-
-      if (option == 'toggle') data.toggle()
-      else if (option) data.setState(option)
-    })
-  }
-
-  $.fn.button.Constructor = Button
-
-
-  // BUTTON NO CONFLICT
-  // ==================
-
-  $.fn.button.noConflict = function () {
-    $.fn.button = old
-    return this
-  }
-
-
-  // BUTTON DATA-API
-  // ===============
-
-  $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {
-    var $btn = $(e.target)
-    if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
-    $btn.button('toggle')
-    e.preventDefault()
-  })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: carousel.js v3.1.1
- * http://getbootstrap.com/javascript/#carousel
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // CAROUSEL CLASS DEFINITION
-  // =========================
-
-  var Carousel = function (element, options) {
-    this.$element    = $(element)
-    this.$indicators = this.$element.find('.carousel-indicators')
-    this.options     = options
-    this.paused      =
-      this.sliding     =
-        this.interval    =
-          this.$active     =
-            this.$items      = null
-
-    this.options.pause == 'hover' && this.$element
-      .on('mouseenter', $.proxy(this.pause, this))
-      .on('mouseleave', $.proxy(this.cycle, this))
-  }
-
-  Carousel.DEFAULTS = {
-    interval: 5000,
-    pause: 'hover',
-    wrap: true
-  }
-
-  Carousel.prototype.cycle =  function (e) {
-    e || (this.paused = false)
-
-    this.interval && clearInterval(this.interval)
-
-    this.options.interval
-      && !this.paused
-    && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
-
-    return this
-  }
-
-  Carousel.prototype.getActiveIndex = function () {
-    this.$active = this.$element.find('.item.active')
-    this.$items  = this.$active.parent().children()
-
-    return this.$items.index(this.$active)
-  }
-
-  Carousel.prototype.to = function (pos) {
-    var that        = this
-    var activeIndex = this.getActiveIndex()
-
-    if (pos > (this.$items.length - 1) || pos < 0) return
-
-    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) })
-    if (activeIndex == pos) return this.pause().cycle()
-
-    return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
-  }
-
-  Carousel.prototype.pause = function (e) {
-    e || (this.paused = true)
-
-    if (this.$element.find('.next, .prev').length && $.support.transition) {
-      this.$element.trigger($.support.transition.end)
-      this.cycle(true)
-    }
-
-    this.interval = clearInterval(this.interval)
-
-    return this
-  }
-
-  Carousel.prototype.next = function () {
-    if (this.sliding) return
-    return this.slide('next')
-  }
-
-  Carousel.prototype.prev = function () {
-    if (this.sliding) return
-    return this.slide('prev')
-  }
-
-  Carousel.prototype.slide = function (type, next) {
-    var $active   = this.$element.find('.item.active')
-    var $next     = next || $active[type]()
-    var isCycling = this.interval
-    var direction = type == 'next' ? 'left' : 'right'
-    var fallback  = type == 'next' ? 'first' : 'last'
-    var that      = this
-
-    if (!$next.length) {
-      if (!this.options.wrap) return
-      $next = this.$element.find('.item')[fallback]()
-    }
-
-    if ($next.hasClass('active')) return this.sliding = false
-
-    var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })
-    this.$element.trigger(e)
-    if (e.isDefaultPrevented()) return
-
-    this.sliding = true
-
-    isCycling && this.pause()
-
-    if (this.$indicators.length) {
-      this.$indicators.find('.active').removeClass('active')
-      this.$element.one('slid.bs.carousel', function () {
-        var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
-        $nextIndicator && $nextIndicator.addClass('active')
-      })
-    }
-
-    if ($.support.transition && this.$element.hasClass('slide')) {
-      $next.addClass(type)
-      $next[0].offsetWidth // force reflow
-      $active.addClass(direction)
-      $next.addClass(direction)
-      $active
-        .one($.support.transition.end, function () {
-          $next.removeClass([type, direction].join(' ')).addClass('active')
-          $active.removeClass(['active', direction].join(' '))
-          that.sliding = false
-          setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0)
-        })
-        .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
-    } else {
-      $active.removeClass('active')
-      $next.addClass('active')
-      this.sliding = false
-      this.$element.trigger('slid.bs.carousel')
-    }
-
-    isCycling && this.cycle()
-
-    return this
-  }
-
-
-  // CAROUSEL PLUGIN DEFINITION
-  // ==========================
-
-  var old = $.fn.carousel
-
-  $.fn.carousel = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.carousel')
-      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
-      var action  = typeof option == 'string' ? option : options.slide
-
-      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
-      if (typeof option == 'number') data.to(option)
-      else if (action) data[action]()
-      else if (options.interval) data.pause().cycle()
-    })
-  }
-
-  $.fn.carousel.Constructor = Carousel
-
-
-  // CAROUSEL NO CONFLICT
-  // ====================
-
-  $.fn.carousel.noConflict = function () {
-    $.fn.carousel = old
-    return this
-  }
-
-
-  // CAROUSEL DATA-API
-  // =================
-
-  $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
-    var $this   = $(this), href
-    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
-    var options = $.extend({}, $target.data(), $this.data())
-    var slideIndex = $this.attr('data-slide-to')
-    if (slideIndex) options.interval = false
-
-    $target.carousel(options)
-
-    if (slideIndex = $this.attr('data-slide-to')) {
-      $target.data('bs.carousel').to(slideIndex)
-    }
-
-    e.preventDefault()
-  })
-
-  $(window).on('load', function () {
-    $('[data-ride="carousel"]').each(function () {
-      var $carousel = $(this)
-      $carousel.carousel($carousel.data())
-    })
-  })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: collapse.js v3.1.1
- * http://getbootstrap.com/javascript/#collapse
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // COLLAPSE PUBLIC CLASS DEFINITION
-  // ================================
-
-  var Collapse = function (element, options) {
-    this.$element      = $(element)
-    this.options       = $.extend({}, Collapse.DEFAULTS, options)
-    this.transitioning = null
-
-    if (this.options.parent) this.$parent = $(this.options.parent)
-    if (this.options.toggle) this.toggle()
-  }
-
-  Collapse.DEFAULTS = {
-    toggle: true
-  }
-
-  Collapse.prototype.dimension = function () {
-    var hasWidth = this.$element.hasClass('width')
-    return hasWidth ? 'width' : 'height'
-  }
-
-  Collapse.prototype.show = function () {
-    if (this.transitioning || this.$element.hasClass('in')) return
-
-    var startEvent = $.Event('show.bs.collapse')
-    this.$element.trigger(startEvent)
-    if (startEvent.isDefaultPrevented()) return
-
-    var actives = this.$parent && this.$parent.find('> .panel > .in')
-
-    if (actives && actives.length) {
-      var hasData = actives.data('bs.collapse')
-      if (hasData && hasData.transitioning) return
-      actives.collapse('hide')
-      hasData || actives.data('bs.collapse', null)
-    }
-
-    var dimension = this.dimension()
-
-    this.$element
-      .removeClass('collapse')
-      .addClass('collapsing')
-      [dimension](0)
-
-    this.transitioning = 1
-
-    var complete = function () {
-      this.$element
-        .removeClass('collapsing')
-        .addClass('collapse in')
-        [dimension]('auto')
-      this.transitioning = 0
-      this.$element.trigger('shown.bs.collapse')
-    }
-
-    if (!$.support.transition) return complete.call(this)
-
-    var scrollSize = $.camelCase(['scroll', dimension].join('-'))
-
-    this.$element
-      .one($.support.transition.end, $.proxy(complete, this))
-      .emulateTransitionEnd(350)
-      [dimension](this.$element[0][scrollSize])
-  }
-
-  Collapse.prototype.hide = function () {
-    if (this.transitioning || !this.$element.hasClass('in')) return
-
-    var startEvent = $.Event('hide.bs.collapse')
-    this.$element.trigger(startEvent)
-    if (startEvent.isDefaultPrevented()) return
-
-    var dimension = this.dimension()
-
-    this.$element
-      [dimension](this.$element[dimension]())
-      [0].offsetHeight
-
-    this.$element
-      .addClass('collapsing')
-      .removeClass('collapse')
-      .removeClass('in')
-
-    this.transitioning = 1
-
-    var complete = function () {
-      this.transitioning = 0
-      this.$element
-        .trigger('hidden.bs.collapse')
-        .removeClass('collapsing')
-        .addClass('collapse')
-    }
-
-    if (!$.support.transition) return complete.call(this)
-
-    this.$element
-      [dimension](0)
-      .one($.support.transition.end, $.proxy(complete, this))
-      .emulateTransitionEnd(350)
-  }
-
-  Collapse.prototype.toggle = function () {
-    this[this.$element.hasClass('in') ? 'hide' : 'show']()
-  }
-
-
-  // COLLAPSE PLUGIN DEFINITION
-  // ==========================
-
-  var old = $.fn.collapse
-
-  $.fn.collapse = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.collapse')
-      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
-
-      if (!data && options.toggle && option == 'show') option = !option
-      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.collapse.Constructor = Collapse
-
-
-  // COLLAPSE NO CONFLICT
-  // ====================
-
-  $.fn.collapse.noConflict = function () {
-    $.fn.collapse = old
-    return this
-  }
-
-
-  // COLLAPSE DATA-API
-  // =================
-
-  $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {
-    var $this   = $(this), href
-    var target  = $this.attr('data-target')
-      || e.preventDefault()
-      || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
-    var $target = $(target)
-    var data    = $target.data('bs.collapse')
-    var option  = data ? 'toggle' : $this.data()
-    var parent  = $this.attr('data-parent')
-    var $parent = parent && $(parent)
-
-    if (!data || !data.transitioning) {
-      if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed')
-      $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
-    }
-
-    $target.collapse(option)
-  })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: dropdown.js v3.1.1
- * http://getbootstrap.com/javascript/#dropdowns
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // DROPDOWN CLASS DEFINITION
-  // =========================
-
-  var backdrop = '.dropdown-backdrop'
-  var toggle   = '[data-toggle=dropdown]'
-  var Dropdown = function (element) {
-    $(element).on('click.bs.dropdown', this.toggle)
-  }
-
-  Dropdown.prototype.toggle = function (e) {
-    var $this = $(this)
-
-    if ($this.is('.disabled, :disabled')) return
-
-    var $parent  = getParent($this)
-    var isActive = $parent.hasClass('open')
-
-    clearMenus()
-
-    if (!isActive) {
-      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
-        // if mobile we use a backdrop because click events don't delegate
-        $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
-      }
-
-      var relatedTarget = { relatedTarget: this }
-      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
-
-      if (e.isDefaultPrevented()) return
-
-      $parent
-        .toggleClass('open')
-        .trigger('shown.bs.dropdown', relatedTarget)
-
-      $this.focus()
-    }
-
-    return false
-  }
-
-  Dropdown.prototype.keydown = function (e) {
-    if (!/(38|40|27)/.test(e.keyCode)) return
-
-    var $this = $(this)
-
-    e.preventDefault()
-    e.stopPropagation()
-
-    if ($this.is('.disabled, :disabled')) return
-
-    var $parent  = getParent($this)
-    var isActive = $parent.hasClass('open')
-
-    if (!isActive || (isActive && e.keyCode == 27)) {
-      if (e.which == 27) $parent.find(toggle).focus()
-      return $this.click()
-    }
-
-    var desc = ' li:not(.divider):visible a'
-    var $items = $parent.find('[role=menu]' + desc + ', [role=listbox]' + desc)
-
-    if (!$items.length) return
-
-    var index = $items.index($items.filter(':focus'))
-
-    if (e.keyCode == 38 && index > 0)                 index--                        // up
-    if (e.keyCode == 40 && index < $items.length - 1) index++                        // down
-    if (!~index)                                      index = 0
-
-    $items.eq(index).focus()
-  }
-
-  function clearMenus(e) {
-    $(backdrop).remove()
-    $(toggle).each(function () {
-      var $parent = getParent($(this))
-      var relatedTarget = { relatedTarget: this }
-      if (!$parent.hasClass('open')) return
-      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
-      if (e.isDefaultPrevented()) return
-      $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
-    })
-  }
-
-  function getParent($this) {
-    var selector = $this.attr('data-target')
-
-    if (!selector) {
-      selector = $this.attr('href')
-      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
-    }
-
-    var $parent = selector && $(selector)
-
-    return $parent && $parent.length ? $parent : $this.parent()
-  }
-
-
-  // DROPDOWN PLUGIN DEFINITION
-  // ==========================
-
-  var old = $.fn.dropdown
-
-  $.fn.dropdown = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-      var data  = $this.data('bs.dropdown')
-
-      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
-      if (typeof option == 'string') data[option].call($this)
-    })
-  }
-
-  $.fn.dropdown.Constructor = Dropdown
-
-
-  // DROPDOWN NO CONFLICT
-  // ====================
-
-  $.fn.dropdown.noConflict = function () {
-    $.fn.dropdown = old
-    return this
-  }
-
-
-  // APPLY TO STANDARD DROPDOWN ELEMENTS
-  // ===================================
-
-  $(document)
-    .on('click.bs.dropdown.data-api', clearMenus)
-    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
-    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
-    .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu], [role=listbox]', Dropdown.prototype.keydown)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: modal.js v3.1.1
- * http://getbootstrap.com/javascript/#modals
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // MODAL CLASS DEFINITION
-  // ======================
-
-  var Modal = function (element, options) {
-    this.options   = options
-    this.$element  = $(element)
-    this.$backdrop =
-      this.isShown   = null
-
-    if (this.options.remote) {
-      this.$element
-        .find('.modal-content')
-        .load(this.options.remote, $.proxy(function () {
-          this.$element.trigger('loaded.bs.modal')
-        }, this))
-    }
-  }
-
-  Modal.DEFAULTS = {
-    backdrop: true,
-    keyboard: true,
-    show: true
-  }
-
-  Modal.prototype.toggle = function (_relatedTarget) {
-    return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)
-  }
-
-  Modal.prototype.show = function (_relatedTarget) {
-    var that = this
-    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
-
-    this.$element.trigger(e)
-
-    if (this.isShown || e.isDefaultPrevented()) return
-
-    this.isShown = true
-
-    this.escape()
-
-    this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
-
-    this.backdrop(function () {
-      var transition = $.support.transition && that.$element.hasClass('fade')
-
-      if (!that.$element.parent().length) {
-        that.$element.appendTo(document.body) // don't move modals dom position
-      }
-
-      that.$element
-        .show()
-        .scrollTop(0)
-
-      if (transition) {
-        that.$element[0].offsetWidth // force reflow
-      }
-
-      that.$element
-        .addClass('in')
-        .attr('aria-hidden', false)
-
-      that.enforceFocus()
-
-      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
-
-      transition ?
-        that.$element.find('.modal-dialog') // wait for modal to slide in
-          .one($.support.transition.end, function () {
-            that.$element.focus().trigger(e)
-          })
-          .emulateTransitionEnd(300) :
-        that.$element.focus().trigger(e)
-    })
-  }
-
-  Modal.prototype.hide = function (e) {
-    if (e) e.preventDefault()
-
-    e = $.Event('hide.bs.modal')
-
-    this.$element.trigger(e)
-
-    if (!this.isShown || e.isDefaultPrevented()) return
-
-    this.isShown = false
-
-    this.escape()
-
-    $(document).off('focusin.bs.modal')
-
-    this.$element
-      .removeClass('in')
-      .attr('aria-hidden', true)
-      .off('click.dismiss.bs.modal')
-
-    $.support.transition && this.$element.hasClass('fade') ?
-      this.$element
-        .one($.support.transition.end, $.proxy(this.hideModal, this))
-        .emulateTransitionEnd(300) :
-      this.hideModal()
-  }
-
-  Modal.prototype.enforceFocus = function () {
-    $(document)
-      .off('focusin.bs.modal') // guard against infinite focus loop
-      .on('focusin.bs.modal', $.proxy(function (e) {
-        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
-          this.$element.focus()
-        }
-      }, this))
-  }
-
-  Modal.prototype.escape = function () {
-    if (this.isShown && this.options.keyboard) {
-      this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {
-        e.which == 27 && this.hide()
-      }, this))
-    } else if (!this.isShown) {
-      this.$element.off('keyup.dismiss.bs.modal')
-    }
-  }
-
-  Modal.prototype.hideModal = function () {
-    var that = this
-    this.$element.hide()
-    this.backdrop(function () {
-      that.removeBackdrop()
-      that.$element.trigger('hidden.bs.modal')
-    })
-  }
-
-  Modal.prototype.removeBackdrop = function () {
-    this.$backdrop && this.$backdrop.remove()
-    this.$backdrop = null
-  }
-
-  Modal.prototype.backdrop = function (callback) {
-    var animate = this.$element.hasClass('fade') ? 'fade' : ''
-
-    if (this.isShown && this.options.backdrop) {
-      var doAnimate = $.support.transition && animate
-
-      this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
-        .appendTo(document.body)
-
-      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
-        if (e.target !== e.currentTarget) return
-        this.options.backdrop == 'static'
-          ? this.$element[0].focus.call(this.$element[0])
-          : this.hide.call(this)
-      }, this))
-
-      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
-
-      this.$backdrop.addClass('in')
-
-      if (!callback) return
-
-      doAnimate ?
-        this.$backdrop
-          .one($.support.transition.end, callback)
-          .emulateTransitionEnd(150) :
-        callback()
-
-    } else if (!this.isShown && this.$backdrop) {
-      this.$backdrop.removeClass('in')
-
-      $.support.transition && this.$element.hasClass('fade') ?
-        this.$backdrop
-          .one($.support.transition.end, callback)
-          .emulateTransitionEnd(150) :
-        callback()
-
-    } else if (callback) {
-      callback()
-    }
-  }
-
-
-  // MODAL PLUGIN DEFINITION
-  // =======================
-
-  var old = $.fn.modal
-
-  $.fn.modal = function (option, _relatedTarget) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.modal')
-      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
-
-      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
-      if (typeof option == 'string') data[option](_relatedTarget)
-      else if (options.show) data.show(_relatedTarget)
-    })
-  }
-
-  $.fn.modal.Constructor = Modal
-
-
-  // MODAL NO CONFLICT
-  // =================
-
-  $.fn.modal.noConflict = function () {
-    $.fn.modal = old
-    return this
-  }
-
-
-  // MODAL DATA-API
-  // ==============
-
-  $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
-    var $this   = $(this)
-    var href    = $this.attr('href')
-    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
-    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
-
-    if ($this.is('a')) e.preventDefault()
-
-    $target
-      .modal(option, this)
-      .one('hide', function () {
-        $this.is(':visible') && $this.focus()
-      })
-  })
-
-  $(document)
-    .on('show.bs.modal', '.modal', function () { $(document.body).addClass('modal-open') })
-    .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: tooltip.js v3.1.1
- * http://getbootstrap.com/javascript/#tooltip
- * Inspired by the original jQuery.tipsy by Jason Frame
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // TOOLTIP PUBLIC CLASS DEFINITION
-  // ===============================
-
-  var Tooltip = function (element, options) {
-    this.type       =
-      this.options    =
-        this.enabled    =
-          this.timeout    =
-            this.hoverState =
-              this.$element   = null
-
-    this.init('tooltip', element, options)
-  }
-
-  Tooltip.DEFAULTS = {
-    animation: true,
-    placement: 'top',
-    selector: false,
-    template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
-    trigger: 'hover focus',
-    title: '',
-    delay: 0,
-    html: false,
-    container: false
-  }
-
-  Tooltip.prototype.init = function (type, element, options) {
-    this.enabled  = true
-    this.type     = type
-    this.$element = $(element)
-    this.options  = this.getOptions(options)
-
-    var triggers = this.options.trigger.split(' ')
-
-    for (var i = triggers.length; i--;) {
-      var trigger = triggers[i]
-
-      if (trigger == 'click') {
-        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
-      } else if (trigger != 'manual') {
-        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'
-        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
-
-        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
-        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
-      }
-    }
-
-    this.options.selector ?
-      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
-      this.fixTitle()
-  }
-
-  Tooltip.prototype.getDefaults = function () {
-    return Tooltip.DEFAULTS
-  }
-
-  Tooltip.prototype.getOptions = function (options) {
-    options = $.extend({}, this.getDefaults(), this.$element.data(), options)
-
-    if (options.delay && typeof options.delay == 'number') {
-      options.delay = {
-        show: options.delay,
-        hide: options.delay
-      }
-    }
-
-    return options
-  }
-
-  Tooltip.prototype.getDelegateOptions = function () {
-    var options  = {}
-    var defaults = this.getDefaults()
-
-    this._options && $.each(this._options, function (key, value) {
-      if (defaults[key] != value) options[key] = value
-    })
-
-    return options
-  }
-
-  Tooltip.prototype.enter = function (obj) {
-    var self = obj instanceof this.constructor ?
-      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
-
-    clearTimeout(self.timeout)
-
-    self.hoverState = 'in'
-
-    if (!self.options.delay || !self.options.delay.show) return self.show()
-
-    self.timeout = setTimeout(function () {
-      if (self.hoverState == 'in') self.show()
-    }, self.options.delay.show)
-  }
-
-  Tooltip.prototype.leave = function (obj) {
-    var self = obj instanceof this.constructor ?
-      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
-
-    clearTimeout(self.timeout)
-
-    self.hoverState = 'out'
-
-    if (!self.options.delay || !self.options.delay.hide) return self.hide()
-
-    self.timeout = setTimeout(function () {
-      if (self.hoverState == 'out') self.hide()
-    }, self.options.delay.hide)
-  }
-
-  Tooltip.prototype.show = function () {
-    var e = $.Event('show.bs.' + this.type)
-
-    if (this.hasContent() && this.enabled) {
-      this.$element.trigger(e)
-
-      if (e.isDefaultPrevented()) return
-      var that = this;
-
-      var $tip = this.tip()
-
-      this.setContent()
-
-      if (this.options.animation) $tip.addClass('fade')
-
-      var placement = typeof this.options.placement == 'function' ?
-        this.options.placement.call(this, $tip[0], this.$element[0]) :
-        this.options.placement
-
-      var autoToken = /\s?auto?\s?/i
-      var autoPlace = autoToken.test(placement)
-      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
-
-      $tip
-        .detach()
-        .css({ top: 0, left: 0, display: 'block' })
-        .addClass(placement)
-
-      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
-
-      var pos          = this.getPosition()
-      var actualWidth  = $tip[0].offsetWidth
-      var actualHeight = $tip[0].offsetHeight
-
-      if (autoPlace) {
-        var $parent = this.$element.parent()
-
-        var orgPlacement = placement
-        var docScroll    = document.documentElement.scrollTop || document.body.scrollTop
-        var parentWidth  = this.options.container == 'body' ? window.innerWidth  : $parent.outerWidth()
-        var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()
-        var parentLeft   = this.options.container == 'body' ? 0 : $parent.offset().left
-
-        placement = placement == 'bottom' && pos.top   + pos.height  + actualHeight - docScroll > parentHeight  ? 'top'    :
-          placement == 'top'    && pos.top   - docScroll   - actualHeight < 0                         ? 'bottom' :
-            placement == 'right'  && pos.right + actualWidth > parentWidth                              ? 'left'   :
-              placement == 'left'   && pos.left  - actualWidth < parentLeft                               ? 'right'  :
-                placement
-
-        $tip
-          .removeClass(orgPlacement)
-          .addClass(placement)
-      }
-
-      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
-
-      this.applyPlacement(calculatedOffset, placement)
-      this.hoverState = null
-
-      var complete = function() {
-        that.$element.trigger('shown.bs.' + that.type)
-      }
-
-      $.support.transition && this.$tip.hasClass('fade') ?
-        $tip
-          .one($.support.transition.end, complete)
-          .emulateTransitionEnd(150) :
-        complete()
-    }
-  }
-
-  Tooltip.prototype.applyPlacement = function (offset, placement) {
-    var replace
-    var $tip   = this.tip()
-    var width  = $tip[0].offsetWidth
-    var height = $tip[0].offsetHeight
-
-    // manually read margins because getBoundingClientRect includes difference
-    var marginTop = parseInt($tip.css('margin-top'), 10)
-    var marginLeft = parseInt($tip.css('margin-left'), 10)
-
-    // we must check for NaN for ie 8/9
-    if (isNaN(marginTop))  marginTop  = 0
-    if (isNaN(marginLeft)) marginLeft = 0
-
-    offset.top  = offset.top  + marginTop
-    offset.left = offset.left + marginLeft
-
-    // $.fn.offset doesn't round pixel values
-    // so we use setOffset directly with our own function B-0
-    $.offset.setOffset($tip[0], $.extend({
-      using: function (props) {
-        $tip.css({
-          top: Math.round(props.top),
-          left: Math.round(props.left)
-        })
-      }
-    }, offset), 0)
-
-    $tip.addClass('in')
-
-    // check to see if placing tip in new offset caused the tip to resize itself
-    var actualWidth  = $tip[0].offsetWidth
-    var actualHeight = $tip[0].offsetHeight
-
-    if (placement == 'top' && actualHeight != height) {
-      replace = true
-      offset.top = offset.top + height - actualHeight
-    }
-
-    if (/bottom|top/.test(placement)) {
-      var delta = 0
-
-      if (offset.left < 0) {
-        delta       = offset.left * -2
-        offset.left = 0
-
-        $tip.offset(offset)
-
-        actualWidth  = $tip[0].offsetWidth
-        actualHeight = $tip[0].offsetHeight
-      }
-
-      this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
-    } else {
-      this.replaceArrow(actualHeight - height, actualHeight, 'top')
-    }
-
-    if (replace) $tip.offset(offset)
-  }
-
-  Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
-    this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')
-  }
-
-  Tooltip.prototype.setContent = function () {
-    var $tip  = this.tip()
-    var title = this.getTitle()
-
-    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
-    $tip.removeClass('fade in top bottom left right')
-  }
-
-  Tooltip.prototype.hide = function () {
-    var that = this
-    var $tip = this.tip()
-    var e    = $.Event('hide.bs.' + this.type)
-
-    function complete() {
-      if (that.hoverState != 'in') $tip.detach()
-      that.$element.trigger('hidden.bs.' + that.type)
-    }
-
-    this.$element.trigger(e)
-
-    if (e.isDefaultPrevented()) return
-
-    $tip.removeClass('in')
-
-    $.support.transition && this.$tip.hasClass('fade') ?
-      $tip
-        .one($.support.transition.end, complete)
-        .emulateTransitionEnd(150) :
-      complete()
-
-    this.hoverState = null
-
-    return this
-  }
-
-  Tooltip.prototype.fixTitle = function () {
-    var $e = this.$element
-    if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
-      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
-    }
-  }
-
-  Tooltip.prototype.hasContent = function () {
-    return this.getTitle()
-  }
-
-  Tooltip.prototype.getPosition = function () {
-    var el = this.$element[0]
-    return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
-      width: el.offsetWidth,
-      height: el.offsetHeight
-    }, this.$element.offset())
-  }
-
-  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
-    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2  } :
-      placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2  } :
-        placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
-          /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }
-  }
-
-  Tooltip.prototype.getTitle = function () {
-    var title
-    var $e = this.$element
-    var o  = this.options
-
-    title = $e.attr('data-original-title')
-      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
-
-    return title
-  }
-
-  Tooltip.prototype.tip = function () {
-    return this.$tip = this.$tip || $(this.options.template)
-  }
-
-  Tooltip.prototype.arrow = function () {
-    return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')
-  }
-
-  Tooltip.prototype.validate = function () {
-    if (!this.$element[0].parentNode) {
-      this.hide()
-      this.$element = null
-      this.options  = null
-    }
-  }
-
-  Tooltip.prototype.enable = function () {
-    this.enabled = true
-  }
-
-  Tooltip.prototype.disable = function () {
-    this.enabled = false
-  }
-
-  Tooltip.prototype.toggleEnabled = function () {
-    this.enabled = !this.enabled
-  }
-
-  Tooltip.prototype.toggle = function (e) {
-    var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this
-    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
-  }
-
-  Tooltip.prototype.destroy = function () {
-    clearTimeout(this.timeout)
-    this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
-  }
-
-
-  // TOOLTIP PLUGIN DEFINITION
-  // =========================
-
-  var old = $.fn.tooltip
-
-  $.fn.tooltip = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.tooltip')
-      var options = typeof option == 'object' && option
-
-      if (!data && option == 'destroy') return
-      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.tooltip.Constructor = Tooltip
-
-
-  // TOOLTIP NO CONFLICT
-  // ===================
-
-  $.fn.tooltip.noConflict = function () {
-    $.fn.tooltip = old
-    return this
-  }
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: popover.js v3.1.1
- * http://getbootstrap.com/javascript/#popovers
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // POPOVER PUBLIC CLASS DEFINITION
-  // ===============================
-
-  var Popover = function (element, options) {
-    this.init('popover', element, options)
-  }
-
-  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
-
-  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
-    placement: 'right',
-    trigger: 'click',
-    content: '',
-    template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
-  })
-
-
-  // NOTE: POPOVER EXTENDS tooltip.js
-  // ================================
-
-  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
-
-  Popover.prototype.constructor = Popover
-
-  Popover.prototype.getDefaults = function () {
-    return Popover.DEFAULTS
-  }
-
-  Popover.prototype.setContent = function () {
-    var $tip    = this.tip()
-    var title   = this.getTitle()
-    var content = this.getContent()
-
-    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
-    $tip.find('.popover-content')[ // we use append for html objects to maintain js events
-      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
-      ](content)
-
-    $tip.removeClass('fade top bottom left right in')
-
-    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
-    // this manually by checking the contents.
-    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
-  }
-
-  Popover.prototype.hasContent = function () {
-    return this.getTitle() || this.getContent()
-  }
-
-  Popover.prototype.getContent = function () {
-    var $e = this.$element
-    var o  = this.options
-
-    return $e.attr('data-content')
-      || (typeof o.content == 'function' ?
-      o.content.call($e[0]) :
-      o.content)
-  }
-
-  Popover.prototype.arrow = function () {
-    return this.$arrow = this.$arrow || this.tip().find('.arrow')
-  }
-
-  Popover.prototype.tip = function () {
-    if (!this.$tip) this.$tip = $(this.options.template)
-    return this.$tip
-  }
-
-
-  // POPOVER PLUGIN DEFINITION
-  // =========================
-
-  var old = $.fn.popover
-
-  $.fn.popover = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.popover')
-      var options = typeof option == 'object' && option
-
-      if (!data && option == 'destroy') return
-      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.popover.Constructor = Popover
-
-
-  // POPOVER NO CONFLICT
-  // ===================
-
-  $.fn.popover.noConflict = function () {
-    $.fn.popover = old
-    return this
-  }
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: scrollspy.js v3.1.1
- * http://getbootstrap.com/javascript/#scrollspy
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // SCROLLSPY CLASS DEFINITION
-  // ==========================
-
-  function ScrollSpy(element, options) {
-    var href
-    var process  = $.proxy(this.process, this)
-
-    this.$element       = $(element).is('body') ? $(window) : $(element)
-    this.$body          = $('body')
-    this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)
-    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)
-    this.selector       = (this.options.target
-      || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
-      || '') + ' .nav li > a'
-    this.offsets        = $([])
-    this.targets        = $([])
-    this.activeTarget   = null
-
-    this.refresh()
-    this.process()
-  }
-
-  ScrollSpy.DEFAULTS = {
-    offset: 10
-  }
-
-  ScrollSpy.prototype.refresh = function () {
-    var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
-
-    this.offsets = $([])
-    this.targets = $([])
-
-    var self     = this
-    var $targets = this.$body
-      .find(this.selector)
-      .map(function () {
-        var $el   = $(this)
-        var href  = $el.data('target') || $el.attr('href')
-        var $href = /^#./.test(href) && $(href)
-
-        return ($href
-          && $href.length
-          && $href.is(':visible')
-          && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
-      })
-      .sort(function (a, b) { return a[0] - b[0] })
-      .each(function () {
-        self.offsets.push(this[0])
-        self.targets.push(this[1])
-      })
-  }
-
-  ScrollSpy.prototype.process = function () {
-    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset
-    var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
-    var maxScroll    = scrollHeight - this.$scrollElement.height()
-    var offsets      = this.offsets
-    var targets      = this.targets
-    var activeTarget = this.activeTarget
-    var i
-
-    if (scrollTop >= maxScroll) {
-      return activeTarget != (i = targets.last()[0]) && this.activate(i)
-    }
-
-    if (activeTarget && scrollTop <= offsets[0]) {
-      return activeTarget != (i = targets[0]) && this.activate(i)
-    }
-
-    for (i = offsets.length; i--;) {
-      activeTarget != targets[i]
-        && scrollTop >= offsets[i]
-        && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
-      && this.activate( targets[i] )
-    }
-  }
-
-  ScrollSpy.prototype.activate = function (target) {
-    this.activeTarget = target
-
-    $(this.selector)
-      .parentsUntil(this.options.target, '.active')
-      .removeClass('active')
-
-    var selector = this.selector +
-      '[data-target="' + target + '"],' +
-      this.selector + '[href="' + target + '"]'
-
-    var active = $(selector)
-      .parents('li')
-      .addClass('active')
-
-    if (active.parent('.dropdown-menu').length) {
-      active = active
-        .closest('li.dropdown')
-        .addClass('active')
-    }
-
-    active.trigger('activate.bs.scrollspy')
-  }
-
-
-  // SCROLLSPY PLUGIN DEFINITION
-  // ===========================
-
-  var old = $.fn.scrollspy
-
-  $.fn.scrollspy = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.scrollspy')
-      var options = typeof option == 'object' && option
-
-      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.scrollspy.Constructor = ScrollSpy
-
-
-  // SCROLLSPY NO CONFLICT
-  // =====================
-
-  $.fn.scrollspy.noConflict = function () {
-    $.fn.scrollspy = old
-    return this
-  }
-
-
-  // SCROLLSPY DATA-API
-  // ==================
-
-  $(window).on('load', function () {
-    $('[data-spy="scroll"]').each(function () {
-      var $spy = $(this)
-      $spy.scrollspy($spy.data())
-    })
-  })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: tab.js v3.1.1
- * http://getbootstrap.com/javascript/#tabs
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // TAB CLASS DEFINITION
-  // ====================
-
-  var Tab = function (element) {
-    this.element = $(element)
-  }
-
-  Tab.prototype.show = function () {
-    var $this    = this.element
-    var $ul      = $this.closest('ul:not(.dropdown-menu)')
-    var selector = $this.data('target')
-
-    if (!selector) {
-      selector = $this.attr('href')
-      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
-    }
-
-    if ($this.parent('li').hasClass('active')) return
-
-    var previous = $ul.find('.active:last a')[0]
-    var e        = $.Event('show.bs.tab', {
-      relatedTarget: previous
-    })
-
-    $this.trigger(e)
-
-    if (e.isDefaultPrevented()) return
-
-    var $target = $(selector)
-
-    this.activate($this.parent('li'), $ul)
-    this.activate($target, $target.parent(), function () {
-      $this.trigger({
-        type: 'shown.bs.tab',
-        relatedTarget: previous
-      })
-    })
-  }
-
-  Tab.prototype.activate = function (element, container, callback) {
-    var $active    = container.find('> .active')
-    var transition = callback
-      && $.support.transition
-      && $active.hasClass('fade')
-
-    function next() {
-      $active
-        .removeClass('active')
-        .find('> .dropdown-menu > .active')
-        .removeClass('active')
-
-      element.addClass('active')
-
-      if (transition) {
-        element[0].offsetWidth // reflow for transition
-        element.addClass('in')
-      } else {
-        element.removeClass('fade')
-      }
-
-      if (element.parent('.dropdown-menu')) {
-        element.closest('li.dropdown').addClass('active')
-      }
-
-      callback && callback()
-    }
-
-    transition ?
-      $active
-        .one($.support.transition.end, next)
-        .emulateTransitionEnd(150) :
-      next()
-
-    $active.removeClass('in')
-  }
-
-
-  // TAB PLUGIN DEFINITION
-  // =====================
-
-  var old = $.fn.tab
-
-  $.fn.tab = function ( option ) {
-    return this.each(function () {
-      var $this = $(this)
-      var data  = $this.data('bs.tab')
-
-      if (!data) $this.data('bs.tab', (data = new Tab(this)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.tab.Constructor = Tab
-
-
-  // TAB NO CONFLICT
-  // ===============
-
-  $.fn.tab.noConflict = function () {
-    $.fn.tab = old
-    return this
-  }
-
-
-  // TAB DATA-API
-  // ============
-
-  $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
-    e.preventDefault()
-    $(this).tab('show')
-  })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: affix.js v3.1.1
- * http://getbootstrap.com/javascript/#affix
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // AFFIX CLASS DEFINITION
-  // ======================
-
-  var Affix = function (element, options) {
-    this.options = $.extend({}, Affix.DEFAULTS, options)
-    this.$window = $(window)
-      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
-      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))
-
-    this.$element     = $(element)
-    this.affixed      =
-      this.unpin        =
-        this.pinnedOffset = null
-
-    this.checkPosition()
-  }
-
-  Affix.RESET = 'affix affix-top affix-bottom'
-
-  Affix.DEFAULTS = {
-    offset: 0
-  }
-
-  Affix.prototype.getPinnedOffset = function () {
-    if (this.pinnedOffset) return this.pinnedOffset
-    this.$element.removeClass(Affix.RESET).addClass('affix')
-    var scrollTop = this.$window.scrollTop()
-    var position  = this.$element.offset()
-    return (this.pinnedOffset = position.top - scrollTop)
-  }
-
-  Affix.prototype.checkPositionWithEventLoop = function () {
-    setTimeout($.proxy(this.checkPosition, this), 1)
-  }
-
-  Affix.prototype.checkPosition = function () {
-    if (!this.$element.is(':visible')) return
-
-    var scrollHeight = $(document).height()
-    var scrollTop    = this.$window.scrollTop()
-    var position     = this.$element.offset()
-    var offset       = this.options.offset
-    var offsetTop    = offset.top
-    var offsetBottom = offset.bottom
-
-    if (this.affixed == 'top') position.top += scrollTop
-
-    if (typeof offset != 'object')         offsetBottom = offsetTop = offset
-    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)
-    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
-
-    var affix = this.unpin   != null && (scrollTop + this.unpin <= position.top) ? false :
-      offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
-        offsetTop    != null && (scrollTop <= offsetTop) ? 'top' : false
-
-    if (this.affixed === affix) return
-    if (this.unpin) this.$element.css('top', '')
-
-    var affixType = 'affix' + (affix ? '-' + affix : '')
-    var e         = $.Event(affixType + '.bs.affix')
-
-    this.$element.trigger(e)
-
-    if (e.isDefaultPrevented()) return
-
-    this.affixed = affix
-    this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
-
-    this.$element
-      .removeClass(Affix.RESET)
-      .addClass(affixType)
-      .trigger($.Event(affixType.replace('affix', 'affixed')))
-
-    if (affix == 'bottom') {
-      this.$element.offset({ top: scrollHeight - offsetBottom - this.$element.height() })
-    }
-  }
-
-
-  // AFFIX PLUGIN DEFINITION
-  // =======================
-
-  var old = $.fn.affix
-
-  $.fn.affix = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.affix')
-      var options = typeof option == 'object' && option
-
-      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.affix.Constructor = Affix
-
-
-  // AFFIX NO CONFLICT
-  // =================
-
-  $.fn.affix.noConflict = function () {
-    $.fn.affix = old
-    return this
-  }
-
-
-  // AFFIX DATA-API
-  // ==============
-
-  $(window).on('load', function () {
-    $('[data-spy="affix"]').each(function () {
-      var $spy = $(this)
-      var data = $spy.data()
-
-      data.offset = data.offset || {}
-
-      if (data.offsetBottom) data.offset.bottom = data.offsetBottom
-      if (data.offsetTop)    data.offset.top    = data.offsetTop
-
-      $spy.affix(data)
-    })
-  })
-
-}(jQuery);

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-basic.min.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-basic.min.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-basic.min.js
deleted file mode 100644
index 5e4d6c2..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-basic.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(){Bootstrap.BsWellComponent=Ember.Component.extend({layoutName:"components/bs-well",classNameBindings:["small:well-sm","large:well-lg"],classNames:["well"],click:function(){return this.sendAction("clicked")}}),Ember.Handlebars.helper("bs-well",Bootstrap.BsWellComponent)}.call(this),function(){Bootstrap.BsPageHeaderComponent=Ember.Component.extend({layoutName:"components/bs-page-header",classNames:["page-header"]}),Ember.Handlebars.helper("bs-page-header",Bootstrap.BsPageHeaderComponent)}.call(this),function(){Bootstrap.BsPanelComponent=Ember.Component.extend(Bootstrap.TypeSupport,{layoutName:"components/bs-panel",classNames:["panel"],classTypePrefix:["panel"],classNameBindings:["fade","fade:in"],clicked:null,onClose:null,fade:!0,collapsible:!1,open:!0,actions:{close:function(){return this.sendAction("onClose"),this.$().removeClass("in"),setTimeout(function(){return this.destroy()}.bind(this),250)}},click:function(){return this.sendAction("clicked")},collapsibleBodyId:funct
 ion(){return""+this.get("elementId")+"_body"}.property("collapsible"),collapsibleBodyLink:function(){return"#"+this.get("elementId")+"_body"}.property("collapsibleBodyId")}),Ember.Handlebars.helper("bs-panel",Bootstrap.BsPanelComponent)}.call(this),this.Ember=this.Ember||{},this.Ember.TEMPLATES=this.Ember.TEMPLATES||{},this.Ember.TEMPLATES["components/bs-page-header"]=Ember.Handlebars.template(function(a,b,c,d,e){function f(a,b){var d,e,f="";return b.buffer.push("\n        <small>"),d={},e={},b.buffer.push(k(c._triageMustache.call(a,"sub",{hash:{},contexts:[a],types:["ID"],hashContexts:e,hashTypes:d,data:b}))),b.buffer.push("</small>\n    "),f}this.compilerInfo=[4,">= 1.0.0"],c=this.merge(c,Ember.Handlebars.helpers),e=e||{};var g,h,i,j="",k=this.escapeExpression,l=this;return e.buffer.push("<h1>\n    "),h={},i={},e.buffer.push(k(c._triageMustache.call(b,"title",{hash:{},contexts:[b],types:["ID"],hashContexts:i,hashTypes:h,data:e}))),e.buffer.push("\n    "),h={},i={},g=c["if"].call(b
 ,"sub",{hash:{},inverse:l.noop,fn:l.program(1,f,e),contexts:[b],types:["ID"],hashContexts:i,hashTypes:h,data:e}),(g||0===g)&&e.buffer.push(g),e.buffer.push("\n</h1>"),j}),this.Ember.TEMPLATES["components/bs-well"]=Ember.Handlebars.template(function(a,b,c,d,e){this.compilerInfo=[4,">= 1.0.0"],c=this.merge(c,Ember.Handlebars.helpers),e=e||{};var f,g,h=this.escapeExpression;f={},g={},e.buffer.push(h(c._triageMustache.call(b,"yield",{hash:{},contexts:[b],types:["ID"],hashContexts:g,hashTypes:f,data:e})))}),this.Ember.TEMPLATES["components/bs-panel"]=Ember.Handlebars.template(function(a,b,c,d,e){function f(a,b){var d,e,f,j="";return b.buffer.push('\n    <div class="panel-heading">\n        '),e={},f={},d=c["if"].call(a,"collapsible",{hash:{},inverse:s.program(4,h,b),fn:s.program(2,g,b),contexts:[a],types:["ID"],hashContexts:f,hashTypes:e,data:b}),(d||0===d)&&b.buffer.push(d),b.buffer.push("\n        "),e={},f={},d=c["if"].call(a,"dismiss",{hash:{},inverse:s.noop,fn:s.program(6,i,b),conte
 xts:[a],types:["ID"],hashContexts:f,hashTypes:e,data:b}),(d||0===d)&&b.buffer.push(d),b.buffer.push("\n    </div>\n"),j}function g(a,b){var d,e,f,g,h="";return b.buffer.push('\n            <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" '),e={href:a},f={href:"ID"},g={hash:{href:"collapsibleBodyLink"},contexts:[],types:[],hashContexts:e,hashTypes:f,data:b},b.buffer.push(r((d=c["bind-attr"]||a["bind-attr"],d?d.call(a,g):q.call(a,"bind-attr",g)))),b.buffer.push(">\n                "),f={},e={},b.buffer.push(r(c._triageMustache.call(a,"heading",{hash:{},contexts:[a],types:["ID"],hashContexts:e,hashTypes:f,data:b}))),b.buffer.push("\n            </a>\n        "),h}function h(a,b){var d,e,f="";return b.buffer.push("\n            "),d={},e={},b.buffer.push(r(c._triageMustache.call(a,"heading",{hash:{},contexts:[a],types:["ID"],hashContexts:e,hashTypes:d,data:b}))),b.buffer.push("\n        "),f}function i(a,b){var d,e,f="";return b.buffer.push('\n            <a c
 lass="close" data-dismiss="panel" '),d={},e={},b.buffer.push(r(c.action.call(a,"close",{hash:{},contexts:[a],types:["STRING"],hashContexts:e,hashTypes:d,data:b}))),b.buffer.push(">&times;</a>\n        "),f}function j(a,b){var d,e,f,g,h="";return b.buffer.push("\n    <div "),e={id:a},f={id:"ID"},g={hash:{id:"collapsibleBodyId"},contexts:[],types:[],hashContexts:e,hashTypes:f,data:b},b.buffer.push(r((d=c["bind-attr"]||a["bind-attr"],d?d.call(a,g):q.call(a,"bind-attr",g)))),b.buffer.push(" "),e={"class":a},f={"class":"STRING"},g={hash:{"class":":panel-collapse :collapse open:in"},contexts:[],types:[],hashContexts:e,hashTypes:f,data:b},b.buffer.push(r((d=c["bind-attr"]||a["bind-attr"],d?d.call(a,g):q.call(a,"bind-attr",g)))),b.buffer.push('>\n        <div class="panel-body">'),f={},e={},b.buffer.push(r(c._triageMustache.call(a,"yield",{hash:{},contexts:[a],types:["ID"],hashContexts:e,hashTypes:f,data:b}))),b.buffer.push("</div>\n    </div>\n"),h}function k(a,b){var d,e,f="";return b.buf
 fer.push('\n    <div id="collapseOne" class="panel-body">'),d={},e={},b.buffer.push(r(c._triageMustache.call(a,"yield",{hash:{},contexts:[a],types:["ID"],hashContexts:e,hashTypes:d,data:b}))),b.buffer.push("</div>\n"),f}function l(a,b){var d,e,f="";return b.buffer.push('\n    <div class="panel-footer">'),d={},e={},b.buffer.push(r(c._triageMustache.call(a,"footer",{hash:{},contexts:[a],types:["ID"],hashContexts:e,hashTypes:d,data:b}))),b.buffer.push("</div>\n"),f}this.compilerInfo=[4,">= 1.0.0"],c=this.merge(c,Ember.Handlebars.helpers),e=e||{};var m,n,o,p="",q=c.helperMissing,r=this.escapeExpression,s=this;return n={},o={},m=c["if"].call(b,"heading",{hash:{},inverse:s.noop,fn:s.program(1,f,e),contexts:[b],types:["ID"],hashContexts:o,hashTypes:n,data:e}),(m||0===m)&&e.buffer.push(m),e.buffer.push("\n\n"),n={},o={},m=c["if"].call(b,"collapsible",{hash:{},inverse:s.program(10,k,e),fn:s.program(8,j,e),contexts:[b],types:["ID"],hashContexts:o,hashTypes:n,data:e}),(m||0===m)&&e.buffer.push
 (m),e.buffer.push("\n\n"),n={},o={},m=c["if"].call(b,"footer",{hash:{},inverse:s.noop,fn:s.program(12,l,e),contexts:[b],types:["ID"],hashContexts:o,hashTypes:n,data:e}),(m||0===m)&&e.buffer.push(m),e.buffer.push("\n"),p});
\ No newline at end of file


[04/42] ambari git commit: AMBARI-21323.Hive view 2.0-UI issues on IE11 +Win 7(Venkata Sairam)

Posted by rl...@apache.org.
AMBARI-21323.Hive view 2.0-UI issues on IE11 +Win 7(Venkata Sairam)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/6fe7cc28
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/6fe7cc28
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/6fe7cc28

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 6fe7cc283957de8e13d1073322a6176895ff289b
Parents: 845eb86
Author: Venkata Sairam <ve...@gmail.com>
Authored: Fri Jun 23 08:15:57 2017 +0530
Committer: Venkata Sairam <ve...@gmail.com>
Committed: Fri Jun 23 08:16:21 2017 +0530

----------------------------------------------------------------------
 contrib/views/hive20/src/main/resources/ui/app/styles/app.scss | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/6fe7cc28/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss b/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss
index 83fac86..522b2d3 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss
+++ b/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss
@@ -835,6 +835,7 @@ ul.dropdown-menu {
 }
 
 .break-word{
+  display: inline-block;
   word-break: break-all;
 }
 


[20/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/d3.v2.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/d3.v2.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/d3.v2.js
deleted file mode 100644
index 714656b..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/d3.v2.js
+++ /dev/null
@@ -1,7033 +0,0 @@
-(function() {
-  function d3_class(ctor, properties) {
-    try {
-      for (var key in properties) {
-        Object.defineProperty(ctor.prototype, key, {
-          value: properties[key],
-          enumerable: false
-        });
-      }
-    } catch (e) {
-      ctor.prototype = properties;
-    }
-  }
-  function d3_arrayCopy(pseudoarray) {
-    var i = -1, n = pseudoarray.length, array = [];
-    while (++i < n) array.push(pseudoarray[i]);
-    return array;
-  }
-  function d3_arraySlice(pseudoarray) {
-    return Array.prototype.slice.call(pseudoarray);
-  }
-  function d3_Map() {}
-  function d3_identity(d) {
-    return d;
-  }
-  function d3_this() {
-    return this;
-  }
-  function d3_true() {
-    return true;
-  }
-  function d3_functor(v) {
-    return typeof v === "function" ? v : function() {
-      return v;
-    };
-  }
-  function d3_rebind(target, source, method) {
-    return function() {
-      var value = method.apply(source, arguments);
-      return arguments.length ? target : value;
-    };
-  }
-  function d3_number(x) {
-    return x != null && !isNaN(x);
-  }
-  function d3_zipLength(d) {
-    return d.length;
-  }
-  function d3_splitter(d) {
-    return d == null;
-  }
-  function d3_collapse(s) {
-    return s.trim().replace(/\s+/g, " ");
-  }
-  function d3_range_integerScale(x) {
-    var k = 1;
-    while (x * k % 1) k *= 10;
-    return k;
-  }
-  function d3_dispatch() {}
-  function d3_dispatch_event(dispatch) {
-    function event() {
-      var z = listeners, i = -1, n = z.length, l;
-      while (++i < n) if (l = z[i].on) l.apply(this, arguments);
-      return dispatch;
-    }
-    var listeners = [], listenerByName = new d3_Map;
-    event.on = function(name, listener) {
-      var l = listenerByName.get(name), i;
-      if (arguments.length < 2) return l && l.on;
-      if (l) {
-        l.on = null;
-        listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1));
-        listenerByName.remove(name);
-      }
-      if (listener) listeners.push(listenerByName.set(name, {
-        on: listener
-      }));
-      return dispatch;
-    };
-    return event;
-  }
-  function d3_format_precision(x, p) {
-    return p - (x ? 1 + Math.floor(Math.log(x + Math.pow(10, 1 + Math.floor(Math.log(x) / Math.LN10) - p)) / Math.LN10) : 1);
-  }
-  function d3_format_typeDefault(x) {
-    return x + "";
-  }
-  function d3_format_group(value) {
-    var i = value.lastIndexOf("."), f = i >= 0 ? value.substring(i) : (i = value.length, ""), t = [];
-    while (i > 0) t.push(value.substring(i -= 3, i + 3));
-    return t.reverse().join(",") + f;
-  }
-  function d3_formatPrefix(d, i) {
-    var k = Math.pow(10, Math.abs(8 - i) * 3);
-    return {
-      scale: i > 8 ? function(d) {
-        return d / k;
-      } : function(d) {
-        return d * k;
-      },
-      symbol: d
-    };
-  }
-  function d3_ease_clamp(f) {
-    return function(t) {
-      return t <= 0 ? 0 : t >= 1 ? 1 : f(t);
-    };
-  }
-  function d3_ease_reverse(f) {
-    return function(t) {
-      return 1 - f(1 - t);
-    };
-  }
-  function d3_ease_reflect(f) {
-    return function(t) {
-      return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t));
-    };
-  }
-  function d3_ease_identity(t) {
-    return t;
-  }
-  function d3_ease_poly(e) {
-    return function(t) {
-      return Math.pow(t, e);
-    };
-  }
-  function d3_ease_sin(t) {
-    return 1 - Math.cos(t * Math.PI / 2);
-  }
-  function d3_ease_exp(t) {
-    return Math.pow(2, 10 * (t - 1));
-  }
-  function d3_ease_circle(t) {
-    return 1 - Math.sqrt(1 - t * t);
-  }
-  function d3_ease_elastic(a, p) {
-    var s;
-    if (arguments.length < 2) p = .45;
-    if (arguments.length < 1) {
-      a = 1;
-      s = p / 4;
-    } else s = p / (2 * Math.PI) * Math.asin(1 / a);
-    return function(t) {
-      return 1 + a * Math.pow(2, 10 * -t) * Math.sin((t - s) * 2 * Math.PI / p);
-    };
-  }
-  function d3_ease_back(s) {
-    if (!s) s = 1.70158;
-    return function(t) {
-      return t * t * ((s + 1) * t - s);
-    };
-  }
-  function d3_ease_bounce(t) {
-    return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;
-  }
-  function d3_eventCancel() {
-    d3.event.stopPropagation();
-    d3.event.preventDefault();
-  }
-  function d3_eventSource() {
-    var e = d3.event, s;
-    while (s = e.sourceEvent) e = s;
-    return e;
-  }
-  function d3_eventDispatch(target) {
-    var dispatch = new d3_dispatch, i = 0, n = arguments.length;
-    while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);
-    dispatch.of = function(thiz, argumentz) {
-      return function(e1) {
-        try {
-          var e0 = e1.sourceEvent = d3.event;
-          e1.target = target;
-          d3.event = e1;
-          dispatch[e1.type].apply(thiz, argumentz);
-        } finally {
-          d3.event = e0;
-        }
-      };
-    };
-    return dispatch;
-  }
-  function d3_transform(m) {
-    var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0;
-    if (r0[0] * r1[1] < r1[0] * r0[1]) {
-      r0[0] *= -1;
-      r0[1] *= -1;
-      kx *= -1;
-      kz *= -1;
-    }
-    this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_transformDegrees;
-    this.translate = [ m.e, m.f ];
-    this.scale = [ kx, ky ];
-    this.skew = ky ? Math.atan2(kz, ky) * d3_transformDegrees : 0;
-  }
-  function d3_transformDot(a, b) {
-    return a[0] * b[0] + a[1] * b[1];
-  }
-  function d3_transformNormalize(a) {
-    var k = Math.sqrt(d3_transformDot(a, a));
-    if (k) {
-      a[0] /= k;
-      a[1] /= k;
-    }
-    return k;
-  }
-  function d3_transformCombine(a, b, k) {
-    a[0] += k * b[0];
-    a[1] += k * b[1];
-    return a;
-  }
-  function d3_interpolateByName(name) {
-    return name == "transform" ? d3.interpolateTransform : d3.interpolate;
-  }
-  function d3_uninterpolateNumber(a, b) {
-    b = b - (a = +a) ? 1 / (b - a) : 0;
-    return function(x) {
-      return (x - a) * b;
-    };
-  }
-  function d3_uninterpolateClamp(a, b) {
-    b = b - (a = +a) ? 1 / (b - a) : 0;
-    return function(x) {
-      return Math.max(0, Math.min(1, (x - a) * b));
-    };
-  }
-  function d3_rgb(r, g, b) {
-    return new d3_Rgb(r, g, b);
-  }
-  function d3_Rgb(r, g, b) {
-    this.r = r;
-    this.g = g;
-    this.b = b;
-  }
-  function d3_rgb_hex(v) {
-    return v < 16 ? "0" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16);
-  }
-  function d3_rgb_parse(format, rgb, hsl) {
-    var r = 0, g = 0, b = 0, m1, m2, name;
-    m1 = /([a-z]+)\((.*)\)/i.exec(format);
-    if (m1) {
-      m2 = m1[2].split(",");
-      switch (m1[1]) {
-       case "hsl":
-        {
-          return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100);
-        }
-       case "rgb":
-        {
-          return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2]));
-        }
-      }
-    }
-    if (name = d3_rgb_names.get(format)) return rgb(name.r, name.g, name.b);
-    if (format != null && format.charAt(0) === "#") {
-      if (format.length === 4) {
-        r = format.charAt(1);
-        r += r;
-        g = format.charAt(2);
-        g += g;
-        b = format.charAt(3);
-        b += b;
-      } else if (format.length === 7) {
-        r = format.substring(1, 3);
-        g = format.substring(3, 5);
-        b = format.substring(5, 7);
-      }
-      r = parseInt(r, 16);
-      g = parseInt(g, 16);
-      b = parseInt(b, 16);
-    }
-    return rgb(r, g, b);
-  }
-  function d3_rgb_hsl(r, g, b) {
-    var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2;
-    if (d) {
-      s = l < .5 ? d / (max + min) : d / (2 - max - min);
-      if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4;
-      h *= 60;
-    } else {
-      s = h = 0;
-    }
-    return d3_hsl(h, s, l);
-  }
-  function d3_rgb_lab(r, g, b) {
-    r = d3_rgb_xyz(r);
-    g = d3_rgb_xyz(g);
-    b = d3_rgb_xyz(b);
-    var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z);
-    return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z));
-  }
-  function d3_rgb_xyz(r) {
-    return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4);
-  }
-  function d3_rgb_parseNumber(c) {
-    var f = parseFloat(c);
-    return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f;
-  }
-  function d3_hsl(h, s, l) {
-    return new d3_Hsl(h, s, l);
-  }
-  function d3_Hsl(h, s, l) {
-    this.h = h;
-    this.s = s;
-    this.l = l;
-  }
-  function d3_hsl_rgb(h, s, l) {
-    function v(h) {
-      if (h > 360) h -= 360; else if (h < 0) h += 360;
-      if (h < 60) return m1 + (m2 - m1) * h / 60;
-      if (h < 180) return m2;
-      if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;
-      return m1;
-    }
-    function vv(h) {
-      return Math.round(v(h) * 255);
-    }
-    var m1, m2;
-    h = h % 360;
-    if (h < 0) h += 360;
-    s = s < 0 ? 0 : s > 1 ? 1 : s;
-    l = l < 0 ? 0 : l > 1 ? 1 : l;
-    m2 = l <= .5 ? l * (1 + s) : l + s - l * s;
-    m1 = 2 * l - m2;
-    return d3_rgb(vv(h + 120), vv(h), vv(h - 120));
-  }
-  function d3_hcl(h, c, l) {
-    return new d3_Hcl(h, c, l);
-  }
-  function d3_Hcl(h, c, l) {
-    this.h = h;
-    this.c = c;
-    this.l = l;
-  }
-  function d3_hcl_lab(h, c, l) {
-    return d3_lab(l, Math.cos(h *= Math.PI / 180) * c, Math.sin(h) * c);
-  }
-  function d3_lab(l, a, b) {
-    return new d3_Lab(l, a, b);
-  }
-  function d3_Lab(l, a, b) {
-    this.l = l;
-    this.a = a;
-    this.b = b;
-  }
-  function d3_lab_rgb(l, a, b) {
-    var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200;
-    x = d3_lab_xyz(x) * d3_lab_X;
-    y = d3_lab_xyz(y) * d3_lab_Y;
-    z = d3_lab_xyz(z) * d3_lab_Z;
-    return d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z));
-  }
-  function d3_lab_hcl(l, a, b) {
-    return d3_hcl(Math.atan2(b, a) / Math.PI * 180, Math.sqrt(a * a + b * b), l);
-  }
-  function d3_lab_xyz(x) {
-    return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037;
-  }
-  function d3_xyz_lab(x) {
-    return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29;
-  }
-  function d3_xyz_rgb(r) {
-    return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055));
-  }
-  function d3_selection(groups) {
-    d3_arraySubclass(groups, d3_selectionPrototype);
-    return groups;
-  }
-  function d3_selection_selector(selector) {
-    return function() {
-      return d3_select(selector, this);
-    };
-  }
-  function d3_selection_selectorAll(selector) {
-    return function() {
-      return d3_selectAll(selector, this);
-    };
-  }
-  function d3_selection_attr(name, value) {
-    function attrNull() {
-      this.removeAttribute(name);
-    }
-    function attrNullNS() {
-      this.removeAttributeNS(name.space, name.local);
-    }
-    function attrConstant() {
-      this.setAttribute(name, value);
-    }
-    function attrConstantNS() {
-      this.setAttributeNS(name.space, name.local, value);
-    }
-    function attrFunction() {
-      var x = value.apply(this, arguments);
-      if (x == null) this.removeAttribute(name); else this.setAttribute(name, x);
-    }
-    function attrFunctionNS() {
-      var x = value.apply(this, arguments);
-      if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x);
-    }
-    name = d3.ns.qualify(name);
-    return value == null ? name.local ? attrNullNS : attrNull : typeof value === "function" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant;
-  }
-  function d3_selection_classedRe(name) {
-    return new RegExp("(?:^|\\s+)" + d3.requote(name) + "(?:\\s+|$)", "g");
-  }
-  function d3_selection_classed(name, value) {
-    function classedConstant() {
-      var i = -1;
-      while (++i < n) name[i](this, value);
-    }
-    function classedFunction() {
-      var i = -1, x = value.apply(this, arguments);
-      while (++i < n) name[i](this, x);
-    }
-    name = name.trim().split(/\s+/).map(d3_selection_classedName);
-    var n = name.length;
-    return typeof value === "function" ? classedFunction : classedConstant;
-  }
-  function d3_selection_classedName(name) {
-    var re = d3_selection_classedRe(name);
-    return function(node, value) {
-      if (c = node.classList) return value ? c.add(name) : c.remove(name);
-      var c = node.className, cb = c.baseVal != null, cv = cb ? c.baseVal : c;
-      if (value) {
-        re.lastIndex = 0;
-        if (!re.test(cv)) {
-          cv = d3_collapse(cv + " " + name);
-          if (cb) c.baseVal = cv; else node.className = cv;
-        }
-      } else if (cv) {
-        cv = d3_collapse(cv.replace(re, " "));
-        if (cb) c.baseVal = cv; else node.className = cv;
-      }
-    };
-  }
-  function d3_selection_style(name, value, priority) {
-    function styleNull() {
-      this.style.removeProperty(name);
-    }
-    function styleConstant() {
-      this.style.setProperty(name, value, priority);
-    }
-    function styleFunction() {
-      var x = value.apply(this, arguments);
-      if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority);
-    }
-    return value == null ? styleNull : typeof value === "function" ? styleFunction : styleConstant;
-  }
-  function d3_selection_property(name, value) {
-    function propertyNull() {
-      delete this[name];
-    }
-    function propertyConstant() {
-      this[name] = value;
-    }
-    function propertyFunction() {
-      var x = value.apply(this, arguments);
-      if (x == null) delete this[name]; else this[name] = x;
-    }
-    return value == null ? propertyNull : typeof value === "function" ? propertyFunction : propertyConstant;
-  }
-  function d3_selection_dataNode(data) {
-    return {
-      __data__: data
-    };
-  }
-  function d3_selection_filter(selector) {
-    return function() {
-      return d3_selectMatches(this, selector);
-    };
-  }
-  function d3_selection_sortComparator(comparator) {
-    if (!arguments.length) comparator = d3.ascending;
-    return function(a, b) {
-      return comparator(a && a.__data__, b && b.__data__);
-    };
-  }
-  function d3_selection_on(type, listener, capture) {
-    function onRemove() {
-      var wrapper = this[name];
-      if (wrapper) {
-        this.removeEventListener(type, wrapper, wrapper.$);
-        delete this[name];
-      }
-    }
-    function onAdd() {
-      function wrapper(e) {
-        var o = d3.event;
-        d3.event = e;
-        args[0] = node.__data__;
-        try {
-          listener.apply(node, args);
-        } finally {
-          d3.event = o;
-        }
-      }
-      var node = this, args = arguments;
-      onRemove.call(this);
-      this.addEventListener(type, this[name] = wrapper, wrapper.$ = capture);
-      wrapper._ = listener;
-    }
-    var name = "__on" + type, i = type.indexOf(".");
-    if (i > 0) type = type.substring(0, i);
-    return listener ? onAdd : onRemove;
-  }
-  function d3_selection_each(groups, callback) {
-    for (var j = 0, m = groups.length; j < m; j++) {
-      for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) {
-        if (node = group[i]) callback(node, i, j);
-      }
-    }
-    return groups;
-  }
-  function d3_selection_enter(selection) {
-    d3_arraySubclass(selection, d3_selection_enterPrototype);
-    return selection;
-  }
-  function d3_transition(groups, id, time) {
-    d3_arraySubclass(groups, d3_transitionPrototype);
-    var tweens = new d3_Map, event = d3.dispatch("start", "end"), ease = d3_transitionEase;
-    groups.id = id;
-    groups.time = time;
-    groups.tween = function(name, tween) {
-      if (arguments.length < 2) return tweens.get(name);
-      if (tween == null) tweens.remove(name); else tweens.set(name, tween);
-      return groups;
-    };
-    groups.ease = function(value) {
-      if (!arguments.length) return ease;
-      ease = typeof value === "function" ? value : d3.ease.apply(d3, arguments);
-      return groups;
-    };
-    groups.each = function(type, listener) {
-      if (arguments.length < 2) return d3_transition_each.call(groups, type);
-      event.on(type, listener);
-      return groups;
-    };
-    d3.timer(function(elapsed) {
-      return d3_selection_each(groups, function(node, i, j) {
-        function start(elapsed) {
-          if (lock.active > id) return stop();
-          lock.active = id;
-          tweens.forEach(function(key, value) {
-            if (value = value.call(node, d, i)) {
-              tweened.push(value);
-            }
-          });
-          event.start.call(node, d, i);
-          if (!tick(elapsed)) d3.timer(tick, 0, time);
-          return 1;
-        }
-        function tick(elapsed) {
-          if (lock.active !== id) return stop();
-          var t = (elapsed - delay) / duration, e = ease(t), n = tweened.length;
-          while (n > 0) {
-            tweened[--n].call(node, e);
-          }
-          if (t >= 1) {
-            stop();
-            d3_transitionId = id;
-            event.end.call(node, d, i);
-            d3_transitionId = 0;
-            return 1;
-          }
-        }
-        function stop() {
-          if (!--lock.count) delete node.__transition__;
-          return 1;
-        }
-        var tweened = [], delay = node.delay, duration = node.duration, lock = (node = node.node).__transition__ || (node.__transition__ = {
-          active: 0,
-          count: 0
-        }), d = node.__data__;
-        ++lock.count;
-        delay <= elapsed ? start(elapsed) : d3.timer(start, delay, time);
-      });
-    }, 0, time);
-    return groups;
-  }
-  function d3_transition_each(callback) {
-    var id = d3_transitionId, ease = d3_transitionEase, delay = d3_transitionDelay, duration = d3_transitionDuration;
-    d3_transitionId = this.id;
-    d3_transitionEase = this.ease();
-    d3_selection_each(this, function(node, i, j) {
-      d3_transitionDelay = node.delay;
-      d3_transitionDuration = node.duration;
-      callback.call(node = node.node, node.__data__, i, j);
-    });
-    d3_transitionId = id;
-    d3_transitionEase = ease;
-    d3_transitionDelay = delay;
-    d3_transitionDuration = duration;
-    return this;
-  }
-  function d3_tweenNull(d, i, a) {
-    return a != "" && d3_tweenRemove;
-  }
-  function d3_tweenByName(b, name) {
-    return d3.tween(b, d3_interpolateByName(name));
-  }
-  function d3_timer_step() {
-    var elapsed, now = Date.now(), t1 = d3_timer_queue;
-    while (t1) {
-      elapsed = now - t1.then;
-      if (elapsed >= t1.delay) t1.flush = t1.callback(elapsed);
-      t1 = t1.next;
-    }
-    var delay = d3_timer_flush() - now;
-    if (delay > 24) {
-      if (isFinite(delay)) {
-        clearTimeout(d3_timer_timeout);
-        d3_timer_timeout = setTimeout(d3_timer_step, delay);
-      }
-      d3_timer_interval = 0;
-    } else {
-      d3_timer_interval = 1;
-      d3_timer_frame(d3_timer_step);
-    }
-  }
-  function d3_timer_flush() {
-    var t0 = null, t1 = d3_timer_queue, then = Infinity;
-    while (t1) {
-      if (t1.flush) {
-        t1 = t0 ? t0.next = t1.next : d3_timer_queue = t1.next;
-      } else {
-        then = Math.min(then, t1.then + t1.delay);
-        t1 = (t0 = t1).next;
-      }
-    }
-    return then;
-  }
-  function d3_mousePoint(container, e) {
-    var svg = container.ownerSVGElement || container;
-    if (svg.createSVGPoint) {
-      var point = svg.createSVGPoint();
-      if (d3_mouse_bug44083 < 0 && (window.scrollX || window.scrollY)) {
-        svg = d3.select(document.body).append("svg").style("position", "absolute").style("top", 0).style("left", 0);
-        var ctm = svg[0][0].getScreenCTM();
-        d3_mouse_bug44083 = !(ctm.f || ctm.e);
-        svg.remove();
-      }
-      if (d3_mouse_bug44083) {
-        point.x = e.pageX;
-        point.y = e.pageY;
-      } else {
-        point.x = e.clientX;
-        point.y = e.clientY;
-      }
-      point = point.matrixTransform(container.getScreenCTM().inverse());
-      return [ point.x, point.y ];
-    }
-    var rect = container.getBoundingClientRect();
-    return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ];
-  }
-  function d3_noop() {}
-  function d3_scaleExtent(domain) {
-    var start = domain[0], stop = domain[domain.length - 1];
-    return start < stop ? [ start, stop ] : [ stop, start ];
-  }
-  function d3_scaleRange(scale) {
-    return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range());
-  }
-  function d3_scale_nice(domain, nice) {
-    var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx;
-    if (x1 < x0) {
-      dx = i0, i0 = i1, i1 = dx;
-      dx = x0, x0 = x1, x1 = dx;
-    }
-    if (nice = nice(x1 - x0)) {
-      domain[i0] = nice.floor(x0);
-      domain[i1] = nice.ceil(x1);
-    }
-    return domain;
-  }
-  function d3_scale_niceDefault() {
-    return Math;
-  }
-  function d3_scale_linear(domain, range, interpolate, clamp) {
-    function rescale() {
-      var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;
-      output = linear(domain, range, uninterpolate, interpolate);
-      input = linear(range, domain, uninterpolate, d3.interpolate);
-      return scale;
-    }
-    function scale(x) {
-      return output(x);
-    }
-    var output, input;
-    scale.invert = function(y) {
-      return input(y);
-    };
-    scale.domain = function(x) {
-      if (!arguments.length) return domain;
-      domain = x.map(Number);
-      return rescale();
-    };
-    scale.range = function(x) {
-      if (!arguments.length) return range;
-      range = x;
-      return rescale();
-    };
-    scale.rangeRound = function(x) {
-      return scale.range(x).interpolate(d3.interpolateRound);
-    };
-    scale.clamp = function(x) {
-      if (!arguments.length) return clamp;
-      clamp = x;
-      return rescale();
-    };
-    scale.interpolate = function(x) {
-      if (!arguments.length) return interpolate;
-      interpolate = x;
-      return rescale();
-    };
-    scale.ticks = function(m) {
-      return d3_scale_linearTicks(domain, m);
-    };
-    scale.tickFormat = function(m) {
-      return d3_scale_linearTickFormat(domain, m);
-    };
-    scale.nice = function() {
-      d3_scale_nice(domain, d3_scale_linearNice);
-      return rescale();
-    };
-    scale.copy = function() {
-      return d3_scale_linear(domain, range, interpolate, clamp);
-    };
-    return rescale();
-  }
-  function d3_scale_linearRebind(scale, linear) {
-    return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp");
-  }
-  function d3_scale_linearNice(dx) {
-    dx = Math.pow(10, Math.round(Math.log(dx) / Math.LN10) - 1);
-    return dx && {
-      floor: function(x) {
-        return Math.floor(x / dx) * dx;
-      },
-      ceil: function(x) {
-        return Math.ceil(x / dx) * dx;
-      }
-    };
-  }
-  function d3_scale_linearTickRange(domain, m) {
-    var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step;
-    if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2;
-    extent[0] = Math.ceil(extent[0] / step) * step;
-    extent[1] = Math.floor(extent[1] / step) * step + step * .5;
-    extent[2] = step;
-    return extent;
-  }
-  function d3_scale_linearTicks(domain, m) {
-    return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));
-  }
-  function d3_scale_linearTickFormat(domain, m) {
-    return d3.format(",." + Math.max(0, -Math.floor(Math.log(d3_scale_linearTickRange(domain, m)[2]) / Math.LN10 + .01)) + "f");
-  }
-  function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {
-    var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]);
-    return function(x) {
-      return i(u(x));
-    };
-  }
-  function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {
-    var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1;
-    if (domain[k] < domain[0]) {
-      domain = domain.slice().reverse();
-      range = range.slice().reverse();
-    }
-    while (++j <= k) {
-      u.push(uninterpolate(domain[j - 1], domain[j]));
-      i.push(interpolate(range[j - 1], range[j]));
-    }
-    return function(x) {
-      var j = d3.bisect(domain, x, 1, k) - 1;
-      return i[j](u[j](x));
-    };
-  }
-  function d3_scale_log(linear, log) {
-    function scale(x) {
-      return linear(log(x));
-    }
-    var pow = log.pow;
-    scale.invert = function(x) {
-      return pow(linear.invert(x));
-    };
-    scale.domain = function(x) {
-      if (!arguments.length) return linear.domain().map(pow);
-      log = x[0] < 0 ? d3_scale_logn : d3_scale_logp;
-      pow = log.pow;
-      linear.domain(x.map(log));
-      return scale;
-    };
-    scale.nice = function() {
-      linear.domain(d3_scale_nice(linear.domain(), d3_scale_niceDefault));
-      return scale;
-    };
-    scale.ticks = function() {
-      var extent = d3_scaleExtent(linear.domain()), ticks = [];
-      if (extent.every(isFinite)) {
-        var i = Math.floor(extent[0]), j = Math.ceil(extent[1]), u = pow(extent[0]), v = pow(extent[1]);
-        if (log === d3_scale_logn) {
-          ticks.push(pow(i));
-          for (; i++ < j; ) for (var k = 9; k > 0; k--) ticks.push(pow(i) * k);
-        } else {
-          for (; i < j; i++) for (var k = 1; k < 10; k++) ticks.push(pow(i) * k);
-          ticks.push(pow(i));
-        }
-        for (i = 0; ticks[i] < u; i++) {}
-        for (j = ticks.length; ticks[j - 1] > v; j--) {}
-        ticks = ticks.slice(i, j);
-      }
-      return ticks;
-    };
-    scale.tickFormat = function(n, format) {
-      if (arguments.length < 2) format = d3_scale_logFormat;
-      if (arguments.length < 1) return format;
-      var k = Math.max(.1, n / scale.ticks().length), f = log === d3_scale_logn ? (e = -1e-12, Math.floor) : (e = 1e-12, Math.ceil), e;
-      return function(d) {
-        return d / pow(f(log(d) + e)) <= k ? format(d) : "";
-      };
-    };
-    scale.copy = function() {
-      return d3_scale_log(linear.copy(), log);
-    };
-    return d3_scale_linearRebind(scale, linear);
-  }
-  function d3_scale_logp(x) {
-    return Math.log(x < 0 ? 0 : x) / Math.LN10;
-  }
-  function d3_scale_logn(x) {
-    return -Math.log(x > 0 ? 0 : -x) / Math.LN10;
-  }
-  function d3_scale_pow(linear, exponent) {
-    function scale(x) {
-      return linear(powp(x));
-    }
-    var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent);
-    scale.invert = function(x) {
-      return powb(linear.invert(x));
-    };
-    scale.domain = function(x) {
-      if (!arguments.length) return linear.domain().map(powb);
-      linear.domain(x.map(powp));
-      return scale;
-    };
-    scale.ticks = function(m) {
-      return d3_scale_linearTicks(scale.domain(), m);
-    };
-    scale.tickFormat = function(m) {
-      return d3_scale_linearTickFormat(scale.domain(), m);
-    };
-    scale.nice = function() {
-      return scale.domain(d3_scale_nice(scale.domain(), d3_scale_linearNice));
-    };
-    scale.exponent = function(x) {
-      if (!arguments.length) return exponent;
-      var domain = scale.domain();
-      powp = d3_scale_powPow(exponent = x);
-      powb = d3_scale_powPow(1 / exponent);
-      return scale.domain(domain);
-    };
-    scale.copy = function() {
-      return d3_scale_pow(linear.copy(), exponent);
-    };
-    return d3_scale_linearRebind(scale, linear);
-  }
-  function d3_scale_powPow(e) {
-    return function(x) {
-      return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);
-    };
-  }
-  function d3_scale_ordinal(domain, ranger) {
-    function scale(x) {
-      return range[((index.get(x) || index.set(x, domain.push(x))) - 1) % range.length];
-    }
-    function steps(start, step) {
-      return d3.range(domain.length).map(function(i) {
-        return start + step * i;
-      });
-    }
-    var index, range, rangeBand;
-    scale.domain = function(x) {
-      if (!arguments.length) return domain;
-      domain = [];
-      index = new d3_Map;
-      var i = -1, n = x.length, xi;
-      while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi));
-      return scale[ranger.t].apply(scale, ranger.a);
-    };
-    scale.range = function(x) {
-      if (!arguments.length) return range;
-      range = x;
-      rangeBand = 0;
-      ranger = {
-        t: "range",
-        a: arguments
-      };
-      return scale;
-    };
-    scale.rangePoints = function(x, padding) {
-      if (arguments.length < 2) padding = 0;
-      var start = x[0], stop = x[1], step = (stop - start) / (Math.max(1, domain.length - 1) + padding);
-      range = steps(domain.length < 2 ? (start + stop) / 2 : start + step * padding / 2, step);
-      rangeBand = 0;
-      ranger = {
-        t: "rangePoints",
-        a: arguments
-      };
-      return scale;
-    };
-    scale.rangeBands = function(x, padding, outerPadding) {
-      if (arguments.length < 2) padding = 0;
-      if (arguments.length < 3) outerPadding = padding;
-      var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding);
-      range = steps(start + step * outerPadding, step);
-      if (reverse) range.reverse();
-      rangeBand = step * (1 - padding);
-      ranger = {
-        t: "rangeBands",
-        a: arguments
-      };
-      return scale;
-    };
-    scale.rangeRoundBands = function(x, padding, outerPadding) {
-      if (arguments.length < 2) padding = 0;
-      if (arguments.length < 3) outerPadding = padding;
-      var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding)), error = stop - start - (domain.length - padding) * step;
-      range = steps(start + Math.round(error / 2), step);
-      if (reverse) range.reverse();
-      rangeBand = Math.round(step * (1 - padding));
-      ranger = {
-        t: "rangeRoundBands",
-        a: arguments
-      };
-      return scale;
-    };
-    scale.rangeBand = function() {
-      return rangeBand;
-    };
-    scale.rangeExtent = function() {
-      return d3_scaleExtent(ranger.a[0]);
-    };
-    scale.copy = function() {
-      return d3_scale_ordinal(domain, ranger);
-    };
-    return scale.domain(domain);
-  }
-  function d3_scale_quantile(domain, range) {
-    function rescale() {
-      var k = 0, n = domain.length, q = range.length;
-      thresholds = [];
-      while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);
-      return scale;
-    }
-    function scale(x) {
-      if (isNaN(x = +x)) return NaN;
-      return range[d3.bisect(thresholds, x)];
-    }
-    var thresholds;
-    scale.domain = function(x) {
-      if (!arguments.length) return domain;
-      domain = x.filter(function(d) {
-        return !isNaN(d);
-      }).sort(d3.ascending);
-      return rescale();
-    };
-    scale.range = function(x) {
-      if (!arguments.length) return range;
-      range = x;
-      return rescale();
-    };
-    scale.quantiles = function() {
-      return thresholds;
-    };
-    scale.copy = function() {
-      return d3_scale_quantile(domain, range);
-    };
-    return rescale();
-  }
-  function d3_scale_quantize(x0, x1, range) {
-    function scale(x) {
-      return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];
-    }
-    function rescale() {
-      kx = range.length / (x1 - x0);
-      i = range.length - 1;
-      return scale;
-    }
-    var kx, i;
-    scale.domain = function(x) {
-      if (!arguments.length) return [ x0, x1 ];
-      x0 = +x[0];
-      x1 = +x[x.length - 1];
-      return rescale();
-    };
-    scale.range = function(x) {
-      if (!arguments.length) return range;
-      range = x;
-      return rescale();
-    };
-    scale.copy = function() {
-      return d3_scale_quantize(x0, x1, range);
-    };
-    return rescale();
-  }
-  function d3_scale_threshold(domain, range) {
-    function scale(x) {
-      return range[d3.bisect(domain, x)];
-    }
-    scale.domain = function(_) {
-      if (!arguments.length) return domain;
-      domain = _;
-      return scale;
-    };
-    scale.range = function(_) {
-      if (!arguments.length) return range;
-      range = _;
-      return scale;
-    };
-    scale.copy = function() {
-      return d3_scale_threshold(domain, range);
-    };
-    return scale;
-  }
-  function d3_scale_identity(domain) {
-    function identity(x) {
-      return +x;
-    }
-    identity.invert = identity;
-    identity.domain = identity.range = function(x) {
-      if (!arguments.length) return domain;
-      domain = x.map(identity);
-      return identity;
-    };
-    identity.ticks = function(m) {
-      return d3_scale_linearTicks(domain, m);
-    };
-    identity.tickFormat = function(m) {
-      return d3_scale_linearTickFormat(domain, m);
-    };
-    identity.copy = function() {
-      return d3_scale_identity(domain);
-    };
-    return identity;
-  }
-  function d3_svg_arcInnerRadius(d) {
-    return d.innerRadius;
-  }
-  function d3_svg_arcOuterRadius(d) {
-    return d.outerRadius;
-  }
-  function d3_svg_arcStartAngle(d) {
-    return d.startAngle;
-  }
-  function d3_svg_arcEndAngle(d) {
-    return d.endAngle;
-  }
-  function d3_svg_line(projection) {
-    function line(data) {
-      function segment() {
-        segments.push("M", interpolate(projection(points), tension));
-      }
-      var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y);
-      while (++i < n) {
-        if (defined.call(this, d = data[i], i)) {
-          points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]);
-        } else if (points.length) {
-          segment();
-          points = [];
-        }
-      }
-      if (points.length) segment();
-      return segments.length ? segments.join("") : null;
-    }
-    var x = d3_svg_lineX, y = d3_svg_lineY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7;
-    line.x = function(_) {
-      if (!arguments.length) return x;
-      x = _;
-      return line;
-    };
-    line.y = function(_) {
-      if (!arguments.length) return y;
-      y = _;
-      return line;
-    };
-    line.defined = function(_) {
-      if (!arguments.length) return defined;
-      defined = _;
-      return line;
-    };
-    line.interpolate = function(_) {
-      if (!arguments.length) return interpolateKey;
-      if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;
-      return line;
-    };
-    line.tension = function(_) {
-      if (!arguments.length) return tension;
-      tension = _;
-      return line;
-    };
-    return line;
-  }
-  function d3_svg_lineX(d) {
-    return d[0];
-  }
-  function d3_svg_lineY(d) {
-    return d[1];
-  }
-  function d3_svg_lineLinear(points) {
-    return points.join("L");
-  }
-  function d3_svg_lineLinearClosed(points) {
-    return d3_svg_lineLinear(points) + "Z";
-  }
-  function d3_svg_lineStepBefore(points) {
-    var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ];
-    while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]);
-    return path.join("");
-  }
-  function d3_svg_lineStepAfter(points) {
-    var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ];
-    while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]);
-    return path.join("");
-  }
-  function d3_svg_lineCardinalOpen(points, tension) {
-    return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1), d3_svg_lineCardinalTangents(points, tension));
-  }
-  function d3_svg_lineCardinalClosed(points, tension) {
-    return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension));
-  }
-  function d3_svg_lineCardinal(points, tension, closed) {
-    return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension));
-  }
-  function d3_svg_lineHermite(points, tangents) {
-    if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) {
-      return d3_svg_lineLinear(points);
-    }
-    var quad = points.length != tangents.length, path = "", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1;
-    if (quad) {
-      path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3) + "," + p[0] + "," + p[1];
-      p0 = points[1];
-      pi = 2;
-    }
-    if (tangents.length > 1) {
-      t = tangents[1];
-      p = points[pi];
-      pi++;
-      path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1]) + "," + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1];
-      for (var i = 2; i < tangents.length; i++, pi++) {
-        p = points[pi];
-        t = tangents[i];
-        path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1];
-      }
-    }
-    if (quad) {
-      var lp = points[pi];
-      path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3) + "," + lp[0] + "," + lp[1];
-    }
-    return path;
-  }
-  function d3_svg_lineCardinalTangents(points, tension) {
-    var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length;
-    while (++i < n) {
-      p0 = p1;
-      p1 = p2;
-      p2 = points[i];
-      tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]);
-    }
-    return tangents;
-  }
-  function d3_svg_lineBasis(points) {
-    if (points.length < 3) return d3_svg_lineLinear(points);
-    var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, ",", y0 ];
-    d3_svg_lineBasisBezier(path, px, py);
-    while (++i < n) {
-      pi = points[i];
-      px.shift();
-      px.push(pi[0]);
-      py.shift();
-      py.push(pi[1]);
-      d3_svg_lineBasisBezier(path, px, py);
-    }
-    i = -1;
-    while (++i < 2) {
-      px.shift();
-      px.push(pi[0]);
-      py.shift();
-      py.push(pi[1]);
-      d3_svg_lineBasisBezier(path, px, py);
-    }
-    return path.join("");
-  }
-  function d3_svg_lineBasisOpen(points) {
-    if (points.length < 4) return d3_svg_lineLinear(points);
-    var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ];
-    while (++i < 3) {
-      pi = points[i];
-      px.push(pi[0]);
-      py.push(pi[1]);
-    }
-    path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));
-    --i;
-    while (++i < n) {
-      pi = points[i];
-      px.shift();
-      px.push(pi[0]);
-      py.shift();
-      py.push(pi[1]);
-      d3_svg_lineBasisBezier(path, px, py);
-    }
-    return path.join("");
-  }
-  function d3_svg_lineBasisClosed(points) {
-    var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = [];
-    while (++i < 4) {
-      pi = points[i % n];
-      px.push(pi[0]);
-      py.push(pi[1]);
-    }
-    path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];
-    --i;
-    while (++i < m) {
-      pi = points[i % n];
-      px.shift();
-      px.push(pi[0]);
-      py.shift();
-      py.push(pi[1]);
-      d3_svg_lineBasisBezier(path, px, py);
-    }
-    return path.join("");
-  }
-  function d3_svg_lineBundle(points, tension) {
-    var n = points.length - 1;
-    if (n) {
-      var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t;
-      while (++i <= n) {
-        p = points[i];
-        t = i / n;
-        p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);
-        p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);
-      }
-    }
-    return d3_svg_lineBasis(points);
-  }
-  function d3_svg_lineDot4(a, b) {
-    return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
-  }
-  function d3_svg_lineBasisBezier(path, x, y) {
-    path.push("C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));
-  }
-  function d3_svg_lineSlope(p0, p1) {
-    return (p1[1] - p0[1]) / (p1[0] - p0[0]);
-  }
-  function d3_svg_lineFiniteDifferences(points) {
-    var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1);
-    while (++i < j) {
-      m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2;
-    }
-    m[i] = d;
-    return m;
-  }
-  function d3_svg_lineMonotoneTangents(points) {
-    var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1;
-    while (++i < j) {
-      d = d3_svg_lineSlope(points[i], points[i + 1]);
-      if (Math.abs(d) < 1e-6) {
-        m[i] = m[i + 1] = 0;
-      } else {
-        a = m[i] / d;
-        b = m[i + 1] / d;
-        s = a * a + b * b;
-        if (s > 9) {
-          s = d * 3 / Math.sqrt(s);
-          m[i] = s * a;
-          m[i + 1] = s * b;
-        }
-      }
-    }
-    i = -1;
-    while (++i <= j) {
-      s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i]));
-      tangents.push([ s || 0, m[i] * s || 0 ]);
-    }
-    return tangents;
-  }
-  function d3_svg_lineMonotone(points) {
-    return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));
-  }
-  function d3_svg_lineRadial(points) {
-    var point, i = -1, n = points.length, r, a;
-    while (++i < n) {
-      point = points[i];
-      r = point[0];
-      a = point[1] + d3_svg_arcOffset;
-      point[0] = r * Math.cos(a);
-      point[1] = r * Math.sin(a);
-    }
-    return points;
-  }
-  function d3_svg_area(projection) {
-    function area(data) {
-      function segment() {
-        segments.push("M", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), "Z");
-      }
-      var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() {
-        return x;
-      } : d3_functor(x1), fy1 = y0 === y1 ? function() {
-        return y;
-      } : d3_functor(y1), x, y;
-      while (++i < n) {
-        if (defined.call(this, d = data[i], i)) {
-          points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]);
-          points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]);
-        } else if (points0.length) {
-          segment();
-          points0 = [];
-          points1 = [];
-        }
-      }
-      if (points0.length) segment();
-      return segments.length ? segments.join("") : null;
-    }
-    var x0 = d3_svg_lineX, x1 = d3_svg_lineX, y0 = 0, y1 = d3_svg_lineY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = "L", tension = .7;
-    area.x = function(_) {
-      if (!arguments.length) return x1;
-      x0 = x1 = _;
-      return area;
-    };
-    area.x0 = function(_) {
-      if (!arguments.length) return x0;
-      x0 = _;
-      return area;
-    };
-    area.x1 = function(_) {
-      if (!arguments.length) return x1;
-      x1 = _;
-      return area;
-    };
-    area.y = function(_) {
-      if (!arguments.length) return y1;
-      y0 = y1 = _;
-      return area;
-    };
-    area.y0 = function(_) {
-      if (!arguments.length) return y0;
-      y0 = _;
-      return area;
-    };
-    area.y1 = function(_) {
-      if (!arguments.length) return y1;
-      y1 = _;
-      return area;
-    };
-    area.defined = function(_) {
-      if (!arguments.length) return defined;
-      defined = _;
-      return area;
-    };
-    area.interpolate = function(_) {
-      if (!arguments.length) return interpolateKey;
-      if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;
-      interpolateReverse = interpolate.reverse || interpolate;
-      L = interpolate.closed ? "M" : "L";
-      return area;
-    };
-    area.tension = function(_) {
-      if (!arguments.length) return tension;
-      tension = _;
-      return area;
-    };
-    return area;
-  }
-  function d3_svg_chordSource(d) {
-    return d.source;
-  }
-  function d3_svg_chordTarget(d) {
-    return d.target;
-  }
-  function d3_svg_chordRadius(d) {
-    return d.radius;
-  }
-  function d3_svg_chordStartAngle(d) {
-    return d.startAngle;
-  }
-  function d3_svg_chordEndAngle(d) {
-    return d.endAngle;
-  }
-  function d3_svg_diagonalProjection(d) {
-    return [ d.x, d.y ];
-  }
-  function d3_svg_diagonalRadialProjection(projection) {
-    return function() {
-      var d = projection.apply(this, arguments), r = d[0], a = d[1] + d3_svg_arcOffset;
-      return [ r * Math.cos(a), r * Math.sin(a) ];
-    };
-  }
-  function d3_svg_symbolSize() {
-    return 64;
-  }
-  function d3_svg_symbolType() {
-    return "circle";
-  }
-  function d3_svg_symbolCircle(size) {
-    var r = Math.sqrt(size / Math.PI);
-    return "M0," + r + "A" + r + "," + r + " 0 1,1 0," + -r + "A" + r + "," + r + " 0 1,1 0," + r + "Z";
-  }
-  function d3_svg_axisX(selection, x) {
-    selection.attr("transform", function(d) {
-      return "translate(" + x(d) + ",0)";
-    });
-  }
-  function d3_svg_axisY(selection, y) {
-    selection.attr("transform", function(d) {
-      return "translate(0," + y(d) + ")";
-    });
-  }
-  function d3_svg_axisSubdivide(scale, ticks, m) {
-    subticks = [];
-    if (m && ticks.length > 1) {
-      var extent = d3_scaleExtent(scale.domain()), subticks, i = -1, n = ticks.length, d = (ticks[1] - ticks[0]) / ++m, j, v;
-      while (++i < n) {
-        for (j = m; --j > 0; ) {
-          if ((v = +ticks[i] - j * d) >= extent[0]) {
-            subticks.push(v);
-          }
-        }
-      }
-      for (--i, j = 0; ++j < m && (v = +ticks[i] + j * d) < extent[1]; ) {
-        subticks.push(v);
-      }
-    }
-    return subticks;
-  }
-  function d3_behavior_zoomDelta() {
-    if (!d3_behavior_zoomDiv) {
-      d3_behavior_zoomDiv = d3.select("body").append("div").style("visibility", "hidden").style("top", 0).style("height", 0).style("width", 0).style("overflow-y", "scroll").append("div").style("height", "2000px").node().parentNode;
-    }
-    var e = d3.event, delta;
-    try {
-      d3_behavior_zoomDiv.scrollTop = 1e3;
-      d3_behavior_zoomDiv.dispatchEvent(e);
-      delta = 1e3 - d3_behavior_zoomDiv.scrollTop;
-    } catch (error) {
-      delta = e.wheelDelta || -e.detail * 5;
-    }
-    return delta;
-  }
-  function d3_layout_bundlePath(link) {
-    var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ];
-    while (start !== lca) {
-      start = start.parent;
-      points.push(start);
-    }
-    var k = points.length;
-    while (end !== lca) {
-      points.splice(k, 0, end);
-      end = end.parent;
-    }
-    return points;
-  }
-  function d3_layout_bundleAncestors(node) {
-    var ancestors = [], parent = node.parent;
-    while (parent != null) {
-      ancestors.push(node);
-      node = parent;
-      parent = parent.parent;
-    }
-    ancestors.push(node);
-    return ancestors;
-  }
-  function d3_layout_bundleLeastCommonAncestor(a, b) {
-    if (a === b) return a;
-    var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null;
-    while (aNode === bNode) {
-      sharedNode = aNode;
-      aNode = aNodes.pop();
-      bNode = bNodes.pop();
-    }
-    return sharedNode;
-  }
-  function d3_layout_forceDragstart(d) {
-    d.fixed |= 2;
-  }
-  function d3_layout_forceDragend(d) {
-    d.fixed &= 1;
-  }
-  function d3_layout_forceMouseover(d) {
-    d.fixed |= 4;
-  }
-  function d3_layout_forceMouseout(d) {
-    d.fixed &= 3;
-  }
-  function d3_layout_forceAccumulate(quad, alpha, charges) {
-    var cx = 0, cy = 0;
-    quad.charge = 0;
-    if (!quad.leaf) {
-      var nodes = quad.nodes, n = nodes.length, i = -1, c;
-      while (++i < n) {
-        c = nodes[i];
-        if (c == null) continue;
-        d3_layout_forceAccumulate(c, alpha, charges);
-        quad.charge += c.charge;
-        cx += c.charge * c.cx;
-        cy += c.charge * c.cy;
-      }
-    }
-    if (quad.point) {
-      if (!quad.leaf) {
-        quad.point.x += Math.random() - .5;
-        quad.point.y += Math.random() - .5;
-      }
-      var k = alpha * charges[quad.point.index];
-      quad.charge += quad.pointCharge = k;
-      cx += k * quad.point.x;
-      cy += k * quad.point.y;
-    }
-    quad.cx = cx / quad.charge;
-    quad.cy = cy / quad.charge;
-  }
-  function d3_layout_forceLinkDistance(link) {
-    return 20;
-  }
-  function d3_layout_forceLinkStrength(link) {
-    return 1;
-  }
-  function d3_layout_stackX(d) {
-    return d.x;
-  }
-  function d3_layout_stackY(d) {
-    return d.y;
-  }
-  function d3_layout_stackOut(d, y0, y) {
-    d.y0 = y0;
-    d.y = y;
-  }
-  function d3_layout_stackOrderDefault(data) {
-    return d3.range(data.length);
-  }
-  function d3_layout_stackOffsetZero(data) {
-    var j = -1, m = data[0].length, y0 = [];
-    while (++j < m) y0[j] = 0;
-    return y0;
-  }
-  function d3_layout_stackMaxIndex(array) {
-    var i = 1, j = 0, v = array[0][1], k, n = array.length;
-    for (; i < n; ++i) {
-      if ((k = array[i][1]) > v) {
-        j = i;
-        v = k;
-      }
-    }
-    return j;
-  }
-  function d3_layout_stackReduceSum(d) {
-    return d.reduce(d3_layout_stackSum, 0);
-  }
-  function d3_layout_stackSum(p, d) {
-    return p + d[1];
-  }
-  function d3_layout_histogramBinSturges(range, values) {
-    return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));
-  }
-  function d3_layout_histogramBinFixed(range, n) {
-    var x = -1, b = +range[0], m = (range[1] - b) / n, f = [];
-    while (++x <= n) f[x] = m * x + b;
-    return f;
-  }
-  function d3_layout_histogramRange(values) {
-    return [ d3.min(values), d3.max(values) ];
-  }
-  function d3_layout_hierarchyRebind(object, hierarchy) {
-    d3.rebind(object, hierarchy, "sort", "children", "value");
-    object.links = d3_layout_hierarchyLinks;
-    object.nodes = function(d) {
-      d3_layout_hierarchyInline = true;
-      return (object.nodes = object)(d);
-    };
-    return object;
-  }
-  function d3_layout_hierarchyChildren(d) {
-    return d.children;
-  }
-  function d3_layout_hierarchyValue(d) {
-    return d.value;
-  }
-  function d3_layout_hierarchySort(a, b) {
-    return b.value - a.value;
-  }
-  function d3_layout_hierarchyLinks(nodes) {
-    return d3.merge(nodes.map(function(parent) {
-      return (parent.children || []).map(function(child) {
-        return {
-          source: parent,
-          target: child
-        };
-      });
-    }));
-  }
-  function d3_layout_packSort(a, b) {
-    return a.value - b.value;
-  }
-  function d3_layout_packInsert(a, b) {
-    var c = a._pack_next;
-    a._pack_next = b;
-    b._pack_prev = a;
-    b._pack_next = c;
-    c._pack_prev = b;
-  }
-  function d3_layout_packSplice(a, b) {
-    a._pack_next = b;
-    b._pack_prev = a;
-  }
-  function d3_layout_packIntersects(a, b) {
-    var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r;
-    return dr * dr - dx * dx - dy * dy > .001;
-  }
-  function d3_layout_packSiblings(node) {
-    function bound(node) {
-      xMin = Math.min(node.x - node.r, xMin);
-      xMax = Math.max(node.x + node.r, xMax);
-      yMin = Math.min(node.y - node.r, yMin);
-      yMax = Math.max(node.y + node.r, yMax);
-    }
-    if (!(nodes = node.children) || !(n = nodes.length)) return;
-    var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n;
-    nodes.forEach(d3_layout_packLink);
-    a = nodes[0];
-    a.x = -a.r;
-    a.y = 0;
-    bound(a);
-    if (n > 1) {
-      b = nodes[1];
-      b.x = b.r;
-      b.y = 0;
-      bound(b);
-      if (n > 2) {
-        c = nodes[2];
-        d3_layout_packPlace(a, b, c);
-        bound(c);
-        d3_layout_packInsert(a, c);
-        a._pack_prev = c;
-        d3_layout_packInsert(c, b);
-        b = a._pack_next;
-        for (i = 3; i < n; i++) {
-          d3_layout_packPlace(a, b, c = nodes[i]);
-          var isect = 0, s1 = 1, s2 = 1;
-          for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {
-            if (d3_layout_packIntersects(j, c)) {
-              isect = 1;
-              break;
-            }
-          }
-          if (isect == 1) {
-            for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {
-              if (d3_layout_packIntersects(k, c)) {
-                break;
-              }
-            }
-          }
-          if (isect) {
-            if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b);
-            i--;
-          } else {
-            d3_layout_packInsert(a, c);
-            b = c;
-            bound(c);
-          }
-        }
-      }
-    }
-    var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0;
-    for (i = 0; i < n; i++) {
-      c = nodes[i];
-      c.x -= cx;
-      c.y -= cy;
-      cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y));
-    }
-    node.r = cr;
-    nodes.forEach(d3_layout_packUnlink);
-  }
-  function d3_layout_packLink(node) {
-    node._pack_next = node._pack_prev = node;
-  }
-  function d3_layout_packUnlink(node) {
-    delete node._pack_next;
-    delete node._pack_prev;
-  }
-  function d3_layout_packTransform(node, x, y, k) {
-    var children = node.children;
-    node.x = x += k * node.x;
-    node.y = y += k * node.y;
-    node.r *= k;
-    if (children) {
-      var i = -1, n = children.length;
-      while (++i < n) d3_layout_packTransform(children[i], x, y, k);
-    }
-  }
-  function d3_layout_packPlace(a, b, c) {
-    var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y;
-    if (db && (dx || dy)) {
-      var da = b.r + c.r, dc = dx * dx + dy * dy;
-      da *= da;
-      db *= db;
-      var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);
-      c.x = a.x + x * dx + y * dy;
-      c.y = a.y + x * dy - y * dx;
-    } else {
-      c.x = a.x + db;
-      c.y = a.y;
-    }
-  }
-  function d3_layout_clusterY(children) {
-    return 1 + d3.max(children, function(child) {
-      return child.y;
-    });
-  }
-  function d3_layout_clusterX(children) {
-    return children.reduce(function(x, child) {
-      return x + child.x;
-    }, 0) / children.length;
-  }
-  function d3_layout_clusterLeft(node) {
-    var children = node.children;
-    return children && children.length ? d3_layout_clusterLeft(children[0]) : node;
-  }
-  function d3_layout_clusterRight(node) {
-    var children = node.children, n;
-    return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node;
-  }
-  function d3_layout_treeSeparation(a, b) {
-    return a.parent == b.parent ? 1 : 2;
-  }
-  function d3_layout_treeLeft(node) {
-    var children = node.children;
-    return children && children.length ? children[0] : node._tree.thread;
-  }
-  function d3_layout_treeRight(node) {
-    var children = node.children, n;
-    return children && (n = children.length) ? children[n - 1] : node._tree.thread;
-  }
-  function d3_layout_treeSearch(node, compare) {
-    var children = node.children;
-    if (children && (n = children.length)) {
-      var child, n, i = -1;
-      while (++i < n) {
-        if (compare(child = d3_layout_treeSearch(children[i], compare), node) > 0) {
-          node = child;
-        }
-      }
-    }
-    return node;
-  }
-  function d3_layout_treeRightmost(a, b) {
-    return a.x - b.x;
-  }
-  function d3_layout_treeLeftmost(a, b) {
-    return b.x - a.x;
-  }
-  function d3_layout_treeDeepest(a, b) {
-    return a.depth - b.depth;
-  }
-  function d3_layout_treeVisitAfter(node, callback) {
-    function visit(node, previousSibling) {
-      var children = node.children;
-      if (children && (n = children.length)) {
-        var child, previousChild = null, i = -1, n;
-        while (++i < n) {
-          child = children[i];
-          visit(child, previousChild);
-          previousChild = child;
-        }
-      }
-      callback(node, previousSibling);
-    }
-    visit(node, null);
-  }
-  function d3_layout_treeShift(node) {
-    var shift = 0, change = 0, children = node.children, i = children.length, child;
-    while (--i >= 0) {
-      child = children[i]._tree;
-      child.prelim += shift;
-      child.mod += shift;
-      shift += child.shift + (change += child.change);
-    }
-  }
-  function d3_layout_treeMove(ancestor, node, shift) {
-    ancestor = ancestor._tree;
-    node = node._tree;
-    var change = shift / (node.number - ancestor.number);
-    ancestor.change += change;
-    node.change -= change;
-    node.shift += shift;
-    node.prelim += shift;
-    node.mod += shift;
-  }
-  function d3_layout_treeAncestor(vim, node, ancestor) {
-    return vim._tree.ancestor.parent == node.parent ? vim._tree.ancestor : ancestor;
-  }
-  function d3_layout_treemapPadNull(node) {
-    return {
-      x: node.x,
-      y: node.y,
-      dx: node.dx,
-      dy: node.dy
-    };
-  }
-  function d3_layout_treemapPad(node, padding) {
-    var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2];
-    if (dx < 0) {
-      x += dx / 2;
-      dx = 0;
-    }
-    if (dy < 0) {
-      y += dy / 2;
-      dy = 0;
-    }
-    return {
-      x: x,
-      y: y,
-      dx: dx,
-      dy: dy
-    };
-  }
-  function d3_dsv(delimiter, mimeType) {
-    function dsv(url, callback) {
-      d3.text(url, mimeType, function(text) {
-        callback(text && dsv.parse(text));
-      });
-    }
-    function formatRow(row) {
-      return row.map(formatValue).join(delimiter);
-    }
-    function formatValue(text) {
-      return reFormat.test(text) ? '"' + text.replace(/\"/g, '""') + '"' : text;
-    }
-    var reParse = new RegExp("\r\n|[" + delimiter + "\r\n]", "g"), reFormat = new RegExp('["' + delimiter + "\n]"), delimiterCode = delimiter.charCodeAt(0);
-    dsv.parse = function(text) {
-      var header;
-      return dsv.parseRows(text, function(row, i) {
-        if (i) {
-          var o = {}, j = -1, m = header.length;
-          while (++j < m) o[header[j]] = row[j];
-          return o;
-        } else {
-          header = row;
-          return null;
-        }
-      });
-    };
-    dsv.parseRows = function(text, f) {
-      function token() {
-        if (reParse.lastIndex >= text.length) return EOF;
-        if (eol) {
-          eol = false;
-          return EOL;
-        }
-        var j = reParse.lastIndex;
-        if (text.charCodeAt(j) === 34) {
-          var i = j;
-          while (i++ < text.length) {
-            if (text.charCodeAt(i) === 34) {
-              if (text.charCodeAt(i + 1) !== 34) break;
-              i++;
-            }
-          }
-          reParse.lastIndex = i + 2;
-          var c = text.charCodeAt(i + 1);
-          if (c === 13) {
-            eol = true;
-            if (text.charCodeAt(i + 2) === 10) reParse.lastIndex++;
-          } else if (c === 10) {
-            eol = true;
-          }
-          return text.substring(j + 1, i).replace(/""/g, '"');
-        }
-        var m = reParse.exec(text);
-        if (m) {
-          eol = m[0].charCodeAt(0) !== delimiterCode;
-          return text.substring(j, m.index);
-        }
-        reParse.lastIndex = text.length;
-        return text.substring(j);
-      }
-      var EOL = {}, EOF = {}, rows = [], n = 0, t, eol;
-      reParse.lastIndex = 0;
-      while ((t = token()) !== EOF) {
-        var a = [];
-        while (t !== EOL && t !== EOF) {
-          a.push(t);
-          t = token();
-        }
-        if (f && !(a = f(a, n++))) continue;
-        rows.push(a);
-      }
-      return rows;
-    };
-    dsv.format = function(rows) {
-      return rows.map(formatRow).join("\n");
-    };
-    return dsv;
-  }
-  function d3_geo_type(types, defaultValue) {
-    return function(object) {
-      return object && types.hasOwnProperty(object.type) ? types[object.type](object) : defaultValue;
-    };
-  }
-  function d3_path_circle(radius) {
-    return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + +2 * radius + "z";
-  }
-  function d3_geo_bounds(o, f) {
-    if (d3_geo_boundsTypes.hasOwnProperty(o.type)) d3_geo_boundsTypes[o.type](o, f);
-  }
-  function d3_geo_boundsFeature(o, f) {
-    d3_geo_bounds(o.geometry, f);
-  }
-  function d3_geo_boundsFeatureCollection(o, f) {
-    for (var a = o.features, i = 0, n = a.length; i < n; i++) {
-      d3_geo_bounds(a[i].geometry, f);
-    }
-  }
-  function d3_geo_boundsGeometryCollection(o, f) {
-    for (var a = o.geometries, i = 0, n = a.length; i < n; i++) {
-      d3_geo_bounds(a[i], f);
-    }
-  }
-  function d3_geo_boundsLineString(o, f) {
-    for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) {
-      f.apply(null, a[i]);
-    }
-  }
-  function d3_geo_boundsMultiLineString(o, f) {
-    for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) {
-      for (var b = a[i], j = 0, m = b.length; j < m; j++) {
-        f.apply(null, b[j]);
-      }
-    }
-  }
-  function d3_geo_boundsMultiPolygon(o, f) {
-    for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) {
-      for (var b = a[i][0], j = 0, m = b.length; j < m; j++) {
-        f.apply(null, b[j]);
-      }
-    }
-  }
-  function d3_geo_boundsPoint(o, f) {
-    f.apply(null, o.coordinates);
-  }
-  function d3_geo_boundsPolygon(o, f) {
-    for (var a = o.coordinates[0], i = 0, n = a.length; i < n; i++) {
-      f.apply(null, a[i]);
-    }
-  }
-  function d3_geo_greatArcSource(d) {
-    return d.source;
-  }
-  function d3_geo_greatArcTarget(d) {
-    return d.target;
-  }
-  function d3_geo_greatArcInterpolator() {
-    function interpolate(t) {
-      var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1;
-      return [ Math.atan2(y, x) / d3_geo_radians, Math.atan2(z, Math.sqrt(x * x + y * y)) / d3_geo_radians ];
-    }
-    var x0, y0, cy0, sy0, kx0, ky0, x1, y1, cy1, sy1, kx1, ky1, d, k;
-    interpolate.distance = function() {
-      if (d == null) k = 1 / Math.sin(d = Math.acos(Math.max(-1, Math.min(1, sy0 * sy1 + cy0 * cy1 * Math.cos(x1 - x0)))));
-      return d;
-    };
-    interpolate.source = function(_) {
-      var cx0 = Math.cos(x0 = _[0] * d3_geo_radians), sx0 = Math.sin(x0);
-      cy0 = Math.cos(y0 = _[1] * d3_geo_radians);
-      sy0 = Math.sin(y0);
-      kx0 = cy0 * cx0;
-      ky0 = cy0 * sx0;
-      d = null;
-      return interpolate;
-    };
-    interpolate.target = function(_) {
-      var cx1 = Math.cos(x1 = _[0] * d3_geo_radians), sx1 = Math.sin(x1);
-      cy1 = Math.cos(y1 = _[1] * d3_geo_radians);
-      sy1 = Math.sin(y1);
-      kx1 = cy1 * cx1;
-      ky1 = cy1 * sx1;
-      d = null;
-      return interpolate;
-    };
-    return interpolate;
-  }
-  function d3_geo_greatArcInterpolate(a, b) {
-    var i = d3_geo_greatArcInterpolator().source(a).target(b);
-    i.distance();
-    return i;
-  }
-  function d3_geom_contourStart(grid) {
-    var x = 0, y = 0;
-    while (true) {
-      if (grid(x, y)) {
-        return [ x, y ];
-      }
-      if (x === 0) {
-        x = y + 1;
-        y = 0;
-      } else {
-        x = x - 1;
-        y = y + 1;
-      }
-    }
-  }
-  function d3_geom_hullCCW(i1, i2, i3, v) {
-    var t, a, b, c, d, e, f;
-    t = v[i1];
-    a = t[0];
-    b = t[1];
-    t = v[i2];
-    c = t[0];
-    d = t[1];
-    t = v[i3];
-    e = t[0];
-    f = t[1];
-    return (f - b) * (c - a) - (d - b) * (e - a) > 0;
-  }
-  function d3_geom_polygonInside(p, a, b) {
-    return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);
-  }
-  function d3_geom_polygonIntersect(c, d, a, b) {
-    var x1 = c[0], x2 = d[0], x3 = a[0], x4 = b[0], y1 = c[1], y2 = d[1], y3 = a[1], y4 = b[1], x13 = x1 - x3, x21 = x2 - x1, x43 = x4 - x3, y13 = y1 - y3, y21 = y2 - y1, y43 = y4 - y3, ua = (x43 * y13 - y43 * x13) / (y43 * x21 - x43 * y21);
-    return [ x1 + ua * x21, y1 + ua * y21 ];
-  }
-  function d3_voronoi_tessellate(vertices, callback) {
-    var Sites = {
-      list: vertices.map(function(v, i) {
-        return {
-          index: i,
-          x: v[0],
-          y: v[1]
-        };
-      }).sort(function(a, b) {
-        return a.y < b.y ? -1 : a.y > b.y ? 1 : a.x < b.x ? -1 : a.x > b.x ? 1 : 0;
-      }),
-      bottomSite: null
-    };
-    var EdgeList = {
-      list: [],
-      leftEnd: null,
-      rightEnd: null,
-      init: function() {
-        EdgeList.leftEnd = EdgeList.createHalfEdge(null, "l");
-        EdgeList.rightEnd = EdgeList.createHalfEdge(null, "l");
-        EdgeList.leftEnd.r = EdgeList.rightEnd;
-        EdgeList.rightEnd.l = EdgeList.leftEnd;
-        EdgeList.list.unshift(EdgeList.leftEnd, EdgeList.rightEnd);
-      },
-      createHalfEdge: function(edge, side) {
-        return {
-          edge: edge,
-          side: side,
-          vertex: null,
-          l: null,
-          r: null
-        };
-      },
-      insert: function(lb, he) {
-        he.l = lb;
-        he.r = lb.r;
-        lb.r.l = he;
-        lb.r = he;
-      },
-      leftBound: function(p) {
-        var he = EdgeList.leftEnd;
-        do {
-          he = he.r;
-        } while (he != EdgeList.rightEnd && Geom.rightOf(he, p));
-        he = he.l;
-        return he;
-      },
-      del: function(he) {
-        he.l.r = he.r;
-        he.r.l = he.l;
-        he.edge = null;
-      },
-      right: function(he) {
-        return he.r;
-      },
-      left: function(he) {
-        return he.l;
-      },
-      leftRegion: function(he) {
-        return he.edge == null ? Sites.bottomSite : he.edge.region[he.side];
-      },
-      rightRegion: function(he) {
-        return he.edge == null ? Sites.bottomSite : he.edge.region[d3_voronoi_opposite[he.side]];
-      }
-    };
-    var Geom = {
-      bisect: function(s1, s2) {
-        var newEdge = {
-          region: {
-            l: s1,
-            r: s2
-          },
-          ep: {
-            l: null,
-            r: null
-          }
-        };
-        var dx = s2.x - s1.x, dy = s2.y - s1.y, adx = dx > 0 ? dx : -dx, ady = dy > 0 ? dy : -dy;
-        newEdge.c = s1.x * dx + s1.y * dy + (dx * dx + dy * dy) * .5;
-        if (adx > ady) {
-          newEdge.a = 1;
-          newEdge.b = dy / dx;
-          newEdge.c /= dx;
-        } else {
-          newEdge.b = 1;
-          newEdge.a = dx / dy;
-          newEdge.c /= dy;
-        }
-        return newEdge;
-      },
-      intersect: function(el1, el2) {
-        var e1 = el1.edge, e2 = el2.edge;
-        if (!e1 || !e2 || e1.region.r == e2.region.r) {
-          return null;
-        }
-        var d = e1.a * e2.b - e1.b * e2.a;
-        if (Math.abs(d) < 1e-10) {
-          return null;
-        }
-        var xint = (e1.c * e2.b - e2.c * e1.b) / d, yint = (e2.c * e1.a - e1.c * e2.a) / d, e1r = e1.region.r, e2r = e2.region.r, el, e;
-        if (e1r.y < e2r.y || e1r.y == e2r.y && e1r.x < e2r.x) {
-          el = el1;
-          e = e1;
-        } else {
-          el = el2;
-          e = e2;
-        }
-        var rightOfSite = xint >= e.region.r.x;
-        if (rightOfSite && el.side === "l" || !rightOfSite && el.side === "r") {
-          return null;
-        }
-        return {
-          x: xint,
-          y: yint
-        };
-      },
-      rightOf: function(he, p) {
-        var e = he.edge, topsite = e.region.r, rightOfSite = p.x > topsite.x;
-        if (rightOfSite && he.side === "l") {
-          return 1;
-        }
-        if (!rightOfSite && he.side === "r") {
-          return 0;
-        }
-        if (e.a === 1) {
-          var dyp = p.y - topsite.y, dxp = p.x - topsite.x, fast = 0, above = 0;
-          if (!rightOfSite && e.b < 0 || rightOfSite && e.b >= 0) {
-            above = fast = dyp >= e.b * dxp;
-          } else {
-            above = p.x + p.y * e.b > e.c;
-            if (e.b < 0) {
-              above = !above;
-            }
-            if (!above) {
-              fast = 1;
-            }
-          }
-          if (!fast) {
-            var dxs = topsite.x - e.region.l.x;
-            above = e.b * (dxp * dxp - dyp * dyp) < dxs * dyp * (1 + 2 * dxp / dxs + e.b * e.b);
-            if (e.b < 0) {
-              above = !above;
-            }
-          }
-        } else {
-          var yl = e.c - e.a * p.x, t1 = p.y - yl, t2 = p.x - topsite.x, t3 = yl - topsite.y;
-          above = t1 * t1 > t2 * t2 + t3 * t3;
-        }
-        return he.side === "l" ? above : !above;
-      },
-      endPoint: function(edge, side, site) {
-        edge.ep[side] = site;
-        if (!edge.ep[d3_voronoi_opposite[side]]) return;
-        callback(edge);
-      },
-      distance: function(s, t) {
-        var dx = s.x - t.x, dy = s.y - t.y;
-        return Math.sqrt(dx * dx + dy * dy);
-      }
-    };
-    var EventQueue = {
-      list: [],
-      insert: function(he, site, offset) {
-        he.vertex = site;
-        he.ystar = site.y + offset;
-        for (var i = 0, list = EventQueue.list, l = list.length; i < l; i++) {
-          var next = list[i];
-          if (he.ystar > next.ystar || he.ystar == next.ystar && site.x > next.vertex.x) {
-            continue;
-          } else {
-            break;
-          }
-        }
-        list.splice(i, 0, he);
-      },
-      del: function(he) {
-        for (var i = 0, ls = EventQueue.list, l = ls.length; i < l && ls[i] != he; ++i) {}
-        ls.splice(i, 1);
-      },
-      empty: function() {
-        return EventQueue.list.length === 0;
-      },
-      nextEvent: function(he) {
-        for (var i = 0, ls = EventQueue.list, l = ls.length; i < l; ++i) {
-          if (ls[i] == he) return ls[i + 1];
-        }
-        return null;
-      },
-      min: function() {
-        var elem = EventQueue.list[0];
-        return {
-          x: elem.vertex.x,
-          y: elem.ystar
-        };
-      },
-      extractMin: function() {
-        return EventQueue.list.shift();
-      }
-    };
-    EdgeList.init();
-    Sites.bottomSite = Sites.list.shift();
-    var newSite = Sites.list.shift(), newIntStar;
-    var lbnd, rbnd, llbnd, rrbnd, bisector;
-    var bot, top, temp, p, v;
-    var e, pm;
-    while (true) {
-      if (!EventQueue.empty()) {
-        newIntStar = EventQueue.min();
-      }
-      if (newSite && (EventQueue.empty() || newSite.y < newIntStar.y || newSite.y == newIntStar.y && newSite.x < newIntStar.x)) {
-        lbnd = EdgeList.leftBound(newSite);
-        rbnd = EdgeList.right(lbnd);
-        bot = EdgeList.rightRegion(lbnd);
-        e = Geom.bisect(bot, newSite);
-        bisector = EdgeList.createHalfEdge(e, "l");
-        EdgeList.insert(lbnd, bisector);
-        p = Geom.intersect(lbnd, bisector);
-        if (p) {
-          EventQueue.del(lbnd);
-          EventQueue.insert(lbnd, p, Geom.distance(p, newSite));
-        }
-        lbnd = bisector;
-        bisector = EdgeList.createHalfEdge(e, "r");
-        EdgeList.insert(lbnd, bisector);
-        p = Geom.intersect(bisector, rbnd);
-        if (p) {
-          EventQueue.insert(bisector, p, Geom.distance(p, newSite));
-        }
-        newSite = Sites.list.shift();
-      } else if (!EventQueue.empty()) {
-        lbnd = EventQueue.extractMin();
-        llbnd = EdgeList.left(lbnd);
-        rbnd = EdgeList.right(lbnd);
-        rrbnd = EdgeList.right(rbnd);
-        bot = EdgeList.leftRegion(lbnd);
-        top = EdgeList.rightRegion(rbnd);
-        v = lbnd.vertex;
-        Geom.endPoint(lbnd.edge, lbnd.side, v);
-        Geom.endPoint(rbnd.edge, rbnd.side, v);
-        EdgeList.del(lbnd);
-        EventQueue.del(rbnd);
-        EdgeList.del(rbnd);
-        pm = "l";
-        if (bot.y > top.y) {
-          temp = bot;
-          bot = top;
-          top = temp;
-          pm = "r";
-        }
-        e = Geom.bisect(bot, top);
-        bisector = EdgeList.createHalfEdge(e, pm);
-        EdgeList.insert(llbnd, bisector);
-        Geom.endPoint(e, d3_voronoi_opposite[pm], v);
-        p = Geom.intersect(llbnd, bisector);
-        if (p) {
-          EventQueue.del(llbnd);
-          EventQueue.insert(llbnd, p, Geom.distance(p, bot));
-        }
-        p = Geom.intersect(bisector, rrbnd);
-        if (p) {
-          EventQueue.insert(bisector, p, Geom.distance(p, bot));
-        }
-      } else {
-        break;
-      }
-    }
-    for (lbnd = EdgeList.right(EdgeList.leftEnd); lbnd != EdgeList.rightEnd; lbnd = EdgeList.right(lbnd)) {
-      callback(lbnd.edge);
-    }
-  }
-  function d3_geom_quadtreeNode() {
-    return {
-      leaf: true,
-      nodes: [],
-      point: null
-    };
-  }
-  function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) {
-    if (!f(node, x1, y1, x2, y2)) {
-      var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes;
-      if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy);
-      if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy);
-      if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2);
-      if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);
-    }
-  }
-  function d3_geom_quadtreePoint(p) {
-    return {
-      x: p[0],
-      y: p[1]
-    };
-  }
-  function d3_time_utc() {
-    this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]);
-  }
-  function d3_time_formatAbbreviate(name) {
-    return name.substring(0, 3);
-  }
-  function d3_time_parse(date, template, string, j) {
-    var c, p, i = 0, n = template.length, m = string.length;
-    while (i < n) {
-      if (j >= m) return -1;
-      c = template.charCodeAt(i++);
-      if (c == 37) {
-        p = d3_time_parsers[template.charAt(i++)];
-        if (!p || (j = p(date, string, j)) < 0) return -1;
-      } else if (c != string.charCodeAt(j++)) {
-        return -1;
-      }
-    }
-    return j;
-  }
-  function d3_time_formatRe(names) {
-    return new RegExp("^(?:" + names.map(d3.requote).join("|") + ")", "i");
-  }
-  function d3_time_formatLookup(names) {
-    var map = new d3_Map, i = -1, n = names.length;
-    while (++i < n) map.set(names[i].toLowerCase(), i);
-    return map;
-  }
-  function d3_time_parseWeekdayAbbrev(date, string, i) {
-    d3_time_dayAbbrevRe.lastIndex = 0;
-    var n = d3_time_dayAbbrevRe.exec(string.substring(i));
-    return n ? i += n[0].length : -1;
-  }
-  function d3_time_parseWeekday(date, string, i) {
-    d3_time_dayRe.lastIndex = 0;
-    var n = d3_time_dayRe.exec(string.substring(i));
-    return n ? i += n[0].length : -1;
-  }
-  function d3_time_parseMonthAbbrev(date, string, i) {
-    d3_time_monthAbbrevRe.lastIndex = 0;
-    var n = d3_time_monthAbbrevRe.exec(string.substring(i));
-    return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i += n[0].length) : -1;
-  }
-  function d3_time_parseMonth(date, string, i) {
-    d3_time_monthRe.lastIndex = 0;
-    var n = d3_time_monthRe.exec(string.substring(i));
-    return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i += n[0].length) : -1;
-  }
-  function d3_time_parseLocaleFull(date, string, i) {
-    return d3_time_parse(date, d3_time_formats.c.toString(), string, i);
-  }
-  function d3_time_parseLocaleDate(date, string, i) {
-    return d3_time_parse(date, d3_time_formats.x.toString(), string, i);
-  }
-  function d3_time_parseLocaleTime(date, string, i) {
-    return d3_time_parse(date, d3_time_formats.X.toString(), string, i);
-  }
-  function d3_time_parseFullYear(date, string, i) {
-    d3_time_numberRe.lastIndex = 0;
-    var n = d3_time_numberRe.exec(string.substring(i, i + 4));
-    return n ? (date.y = +n[0], i += n[0].length) : -1;
-  }
-  function d3_time_parseYear(date, string, i) {
-    d3_time_numberRe.lastIndex = 0;
-    var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-    return n ? (date.y = d3_time_expandYear(+n[0]), i += n[0].length) : -1;
-  }
-  function d3_time_expandYear(d) {
-    return d + (d > 68 ? 1900 : 2e3);
-  }
-  function d3_time_parseMonthNumber(date, string, i) {
-    d3_time_numberRe.lastIndex = 0;
-    var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-    return n ? (date.m = n[0] - 1, i += n[0].length) : -1;
-  }
-  function d3_time_parseDay(date, string, i) {
-    d3_time_numberRe.lastIndex = 0;
-    var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-    return n ? (date.d = +n[0], i += n[0].length) : -1;
-  }
-  function d3_time_parseHour24(date, string, i) {
-    d3_time_numberRe.lastIndex = 0;
-    var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-    return n ? (date.H = +n[0], i += n[0].length) : -1;
-  }
-  function d3_time_parseMinutes(date, string, i) {
-    d3_time_numberRe.lastIndex = 0;
-    var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-    return n ? (date.M = +n[0], i += n[0].length) : -1;
-  }
-  function d3_time_parseSeconds(date, string, i) {
-    d3_time_numberRe.lastIndex = 0;
-    var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-    return n ? (date.S = +n[0], i += n[0].length) : -1;
-  }
-  function d3_time_parseMilliseconds(date, string, i) {
-    d3_time_numberRe.lastIndex = 0;
-    var n = d3_time_numberRe.exec(string.substring(i, i + 3));
-    return n ? (date.L = +n[0], i += n[0].length) : -1;
-  }
-  function d3_time_parseAmPm(date, string, i) {
-    var n = d3_time_amPmLookup.get(string.substring(i, i += 2).toLowerCase());
-    return n == null ? -1 : (date.p = n, i);
-  }
-  function d3_time_zone(d) {
-    var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = ~~(Math.abs(z) / 60), zm = Math.abs(z) % 60;
-    return zs + d3_time_zfill2(zh) + d3_time_zfill2(zm);
-  }
-  function d3_time_formatIsoNative(date) {
-    return date.toISOString();
-  }
-  function d3_time_interval(local, step, number) {
-    function round(date) {
-      var d0 = local(date), d1 = offset(d0, 1);
-      return date - d0 < d1 - date ? d0 : d1;
-    }
-    function ceil(date) {
-      step(date = local(new d3_time(date - 1)), 1);
-      return date;
-    }
-    function offset(date, k) {
-      step(date = new d3_time(+date), k);
-      return date;
-    }
-    function range(t0, t1, dt) {
-      var time = ceil(t0), times = [];
-      if (dt > 1) {
-        while (time < t1) {
-          if (!(number(time) % dt)) times.push(new Date(+time));
-          step(time, 1);
-        }
-      } else {
-        while (time < t1) times.push(new Date(+time)), step(time, 1);
-      }
-      return times;
-    }
-    function range_utc(t0, t1, dt) {
-      try {
-        d3_time = d3_time_utc;
-        var utc = new d3_time_utc;
-        utc._ = t0;
-        return range(utc, t1, dt);
-      } finally {
-        d3_time = Date;
-      }
-    }
-    local.floor = local;
-    local.round = round;
-    local.ceil = ceil;
-    local.offset = offset;
-    local.range = range;
-    var utc = local.utc = d3_time_interval_utc(local);
-    utc.floor = utc;
-    utc.round = d3_time_interval_utc(round);
-    utc.ceil = d3_time_interval_utc(ceil);
-    utc.offset = d3_time_interval_utc(offset);
-    utc.range = range_utc;
-    return local;
-  }
-  function d3_time_interval_utc(method) {
-    return function(date, k) {
-      try {
-        d3_time = d3_time_utc;
-        var utc = new d3_time_utc;
-        utc._ = date;
-        return method(utc, k)._;
-      } finally {
-        d3_time = Date;
-      }
-    };
-  }
-  function d3_time_scale(linear, methods, format) {
-    function scale(x) {
-      return linear(x);
-    }
-    scale.invert = function(x) {
-      return d3_time_scaleDate(linear.invert(x));
-    };
-    scale.domain = function(x) {
-      if (!arguments.length) return linear.domain().map(d3_time_scaleDate);
-      linear.domain(x);
-      return scale;
-    };
-    scale.nice = function(m) {
-      return scale.domain(d3_scale_nice(scale.domain(), function() {
-        return m;
-      }));
-    };
-    scale.ticks = function(m, k) {
-      var extent = d3_time_scaleExtent(scale.domain());
-      if (typeof m !== "function") {
-        var span = extent[1] - extent[0], target = span / m, i = d3.bisect(d3_time_scaleSteps, target);
-        if (i == d3_time_scaleSteps.length) return methods.year(extent, m);
-        if (!i) return linear.ticks(m).map(d3_time_scaleDate);
-        if (Math.log(target / d3_time_scaleSteps[i - 1]) < Math.log(d3_time_scaleSteps[i] / target)) --i;
-        m = methods[i];
-        k = m[1];
-        m = m[0].range;
-      }
-      return m(extent[0], new Date(+extent[1] + 1), k);
-    };
-    scale.tickFormat = function() {
-      return format;
-    };
-    scale.copy = function() {
-      return d3_time_scale(linear.copy(), methods, format);
-    };
-    return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp");
-  }
-  function d3_time_scaleExtent(domain) {
-    var start = domain[0], stop = domain[domain.length - 1];
-    return start < stop ? [ start, stop ] : [ stop, start ];
-  }
-  function d3_time_scaleDate(t) {
-    return new Date(t);
-  }
-  function d3_time_scaleFormat(formats) {
-    return function(date) {
-      var i = formats.length - 1, f = formats[i];
-      while (!f[1](date)) f = formats[--i];
-      return f[0](date);
-    };
-  }
-  function d3_time_scaleSetYear(y) {
-    var d = new Date(y, 0, 1);
-    d.setFullYear(y);
-    return d;
-  }
-  function d3_time_scaleGetYear(d) {
-    var y = d.getFullYear(), d0 = d3_time_scaleSetYear(y), d1 = d3_time_scaleSetYear(y + 1);
-    return y + (d - d0) / (d1 - d0);
-  }
-  function d3_time_scaleUTCSetYear(y) {
-    var d = new Date(Date.UTC(y, 0, 1));
-    d.setUTCFullYear(y);
-    return d;
-  }
-  function d3_time_scaleUTCGetYear(d) {
-    var y = d.getUTCFullYear(), d0 = d3_time_scaleUTCSetYear(y), d1 = d3_time_scaleUTCSetYear(y + 1);
-    return y + (d - d0) / (d1 - d0);
-  }
-  if (!Date.now) Date.now = function() {
-    return +(new Date);
-  };
-  try {
-    document.createElement("div").style.setProperty("opacity", 0, "");
-  } catch (error) {
-    var d3_style_prototype = CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty;
-    d3_style_prototype.setProperty = function(name, value, priority) {
-      d3_style_setProperty.call(this, name, value + "", priority);
-    };
-  }
-  d3 = {
-    version: "2.10.2"
-  };
-  var d3_array = d3_arraySlice;
-  try {
-    d3_array(document.documentElement.childNodes)[0].nodeType;
-  } catch (e) {
-    d3_array = d3_arrayCopy;
-  }
-  var d3_arraySubclass = [].__proto__ ? function(array, prototype) {
-    array.__proto__ = prototype;
-  } : function(array, prototype) {
-    for (var property in prototype) array[property] = prototype[property];
-  };
-  d3.map = function(object) {
-    var map = new d3_Map;
-    for (var key in object) map.set(key, object[key]);
-    return map;
-  };
-  d3_class(d3_Map, {
-    has: function(key) {
-      return d3_map_prefix + key in this;
-    },
-    get: function(key) {
-      return this[d3_map_prefix + key];
-    },
-    set: function(key, value) {
-      return this[d3_map_prefix + key] = value;
-    },
-    remove: function(key) {
-      key = d3_map_prefix + key;
-      return key in this && delete this[key];
-    },
-    keys: function() {
-      var keys = [];
-      this.forEach(function(key) {
-        keys.push(key);
-      });
-      return keys;
-    },
-    values: function() {
-      var values = [];
-      this.forEach(function(key, value) {
-        values.push(value);
-      });
-      return values;
-    },
-    entries: function() {
-      var entries = [];
-      this.forEach(function(key, value) {
-        entries.push({
-          key: key,
-          value: value
-        });
-      });
-      return entries;
-    },
-    forEach: function(f) {
-      for (var key in this) {
-        if (key.charCodeAt(0) === d3_map_prefixCode) {
-          f.call(this, key.substring(1), this[key]);
-        }
-      }
-    }
-  });
-  var d3_map_prefix = "\0", d3_map_prefixCode = d3_map_prefix.charCodeAt(0);
-  d3.functor = d3_functor;
-  d3.rebind = function(target, source) {
-    var i = 1, n = arguments.length, method;
-    while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]);
-    return target;
-  };
-  d3.ascending = function(a, b) {
-    return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
-  };
-  d3.descending = function(a, b) {
-    return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
-  };
-  d3.mean = function(array, f) {
-    var n = array.length, a, m = 0, i = -1, j = 0;
-    if (arguments.length === 1) {
-      while (++i < n) if (d3_number(a = array[i])) m += (a - m) / ++j;
-    } else {
-      while (++i < n) if (d3_number(a = f.call(array, array[i], i))) m += (a - m) / ++j;
-    }
-    return j ? m : undefined;
-  };
-  d3.median = function(array, f) {
-    if (arguments.length > 1) array = array.map(f);
-    array = array.filter(d3_number);
-    return array.length ? d3.quantile(array.sort(d3.ascending), .5) : undefined;
-  };
-  d3.min = function(array, f) {
-    var i = -1, n = array.length, a, b;
-    if (arguments.length === 1) {
-      while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
-      while (++i < n) if ((b = array[i]) != null && a > b) a = b;
-    } else {
-      while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
-      while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;
-    }
-    return a;
-  };
-  d3.max = function(array, f) {
-    var i = -1, n = array.length, a, b;
-    if (arguments.length === 1) {
-      while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
-      while (++i < n) if ((b = array[i]) != null && b > a) a = b;
-    } else {
-      while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
-      while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;
-    }
-    return a;
-  };
-  d3.extent = function(array, f) {
-    var i = -1, n = array.length, a, b, c;
-    if (arguments.length === 1) {
-      while (++i < n && ((a = c = array[i]) == null || a != a)) a = c = undefined;
-      while (++i < n) if ((b = array[i]) != null) {
-        if (a > b) a = b;
-        if (c < b) c = b;
-      }
-    } else {
-      while (++i < n && ((a = c = f.call(array, array[i], i)) == null || a != a)) a = undefined;
-      while (++i < n) if ((b = f.call(array, array[i], i)) != null) {
-        if (a > b) a = b;
-        if (c < b) c = b;
-      }
-    }
-    return [ a, c ];
-  };
-  d3.random = {
-    normal: function(µ, σ) {
-      var n = arguments.length;
-      if (n < 2) σ = 1

<TRUNCATED>

[40/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/ec8deeba
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/ec8deeba
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/ec8deeba

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: ec8deeba201bfceb646d6d4a6e0e6fb97e9bc102
Parents: 8f06a5b
Author: Venkata Sairam <ve...@gmail.com>
Authored: Fri Jun 23 12:31:45 2017 +0530
Committer: Venkata Sairam <ve...@gmail.com>
Committed: Fri Jun 23 12:31:45 2017 +0530

----------------------------------------------------------------------
 contrib/views/pom.xml                           |     1 -
 contrib/views/slider/docs/index.md              |   164 -
 contrib/views/slider/gzip-content.cmd           |    17 -
 contrib/views/slider/gzip-content.ps1           |    81 -
 contrib/views/slider/pom.xml                    |   463 -
 .../apache/ambari/view/slider/AlertField.java   |    62 -
 .../apache/ambari/view/slider/AlertState.java   |    40 -
 .../ambari/view/slider/MetricsHolder.java       |    44 -
 .../apache/ambari/view/slider/SliderApp.java    |   198 -
 .../ambari/view/slider/SliderAppComponent.java  |    62 -
 .../ambari/view/slider/SliderAppType.java       |   107 -
 .../view/slider/SliderAppTypeComponent.java     |   103 -
 .../slider/SliderAppTypesResourceProvider.java  |    94 -
 .../ambari/view/slider/SliderAppsAlerts.java    |   127 -
 .../view/slider/SliderAppsConfiguration.java    |    52 -
 .../view/slider/SliderAppsResourceProvider.java |   124 -
 .../view/slider/SliderAppsViewController.java   |   112 -
 .../slider/SliderAppsViewControllerImpl.java    |  1510 -
 .../apache/ambari/view/slider/TemporalInfo.java |    48 -
 .../apache/ambari/view/slider/ViewStatus.java   |    72 -
 .../view/slider/clients/AmbariClient.java       |    58 -
 .../view/slider/clients/AmbariCluster.java      |    52 -
 .../view/slider/clients/AmbariClusterInfo.java  |    40 -
 .../slider/clients/AmbariHostComponent.java     |    49 -
 .../view/slider/clients/AmbariHostInfo.java     |    32 -
 .../view/slider/clients/AmbariService.java      |    36 -
 .../view/slider/clients/AmbariServiceInfo.java  |    51 -
 .../slider/rest/SliderAppTypesResource.java     |    54 -
 .../view/slider/rest/SliderAppsResource.java    |   163 -
 .../view/slider/rest/ViewStatusResource.java    |    40 -
 .../slider/rest/client/AmbariHttpClient.java    |   233 -
 .../view/slider/rest/client/BaseHttpClient.java |   157 -
 .../slider/rest/client/JMXMetricHolder.java     |    50 -
 .../ambari/view/slider/rest/client/Metric.java  |   158 -
 .../slider/rest/client/SliderAppJmxHelper.java  |   205 -
 .../rest/client/SliderAppMasterClient.java      |   324 -
 .../rest/client/SliderAppMetricsHelper.java     |   159 -
 .../view/slider/rest/client/TimelineMetric.java |   172 -
 .../slider/rest/client/TimelineMetrics.java     |   101 -
 .../rest/client/URLStreamProviderBasicAuth.java |   105 -
 .../slider/src/main/resources/slider.properties |    19 -
 .../slider/src/main/resources/ui/.gitignore     |    31 -
 .../views/slider/src/main/resources/ui/LICENSE  |    21 -
 .../slider/src/main/resources/ui/README.md      |   122 -
 .../src/main/resources/ui/app/assets/404.html   |   175 -
 .../app/assets/apple-touch-icon-precomposed.png |   Bin 1226 -> 0 bytes
 .../resources/ui/app/assets/crossdomain.xml     |    31 -
 .../resources/ui/app/assets/data/apps/apps.json |  1320 -
 .../ui/app/assets/data/apptypes/all_fields.json |   642 -
 .../ui/app/assets/data/metrics/metric.json      |   946 -
 .../ui/app/assets/data/metrics/metric2.json     |  3838 --
 .../ui/app/assets/data/metrics/metric3.json     |  1856 -
 .../ui/app/assets/data/metrics/metric4.json     |   968 -
 .../ui/app/assets/data/resource/empty_json.json |     1 -
 .../data/resource/slider-properties-2.json      |     9 -
 .../assets/data/resource/slider-properties.json |   148 -
 .../app/assets/data/resource/status_false.json  |     8 -
 .../app/assets/data/resource/status_true.json   |     5 -
 .../main/resources/ui/app/assets/favicon.ico    |   Bin 766 -> 0 bytes
 .../ui/app/assets/font/fontawesome-webfont.eot  |   Bin 37405 -> 0 bytes
 .../ui/app/assets/font/fontawesome-webfont.svg  |   399 -
 .../ui/app/assets/font/fontawesome-webfont.ttf  |   Bin 79076 -> 0 bytes
 .../ui/app/assets/font/fontawesome-webfont.woff |   Bin 43572 -> 0 bytes
 .../resources/ui/app/assets/images/.gitkeep     |     0
 .../ui-bg_flat_0_aaaaaa_40x100.png              |   Bin 180 -> 0 bytes
 .../ui-bg_glass_55_fbf9ee_1x400.png             |   Bin 120 -> 0 bytes
 .../ui-bg_glass_65_ffffff_1x400.png             |   Bin 105 -> 0 bytes
 .../ui-bg_glass_75_dadada_1x400.png             |   Bin 111 -> 0 bytes
 .../ui-bg_glass_75_e6e6e6_1x400.png             |   Bin 110 -> 0 bytes
 .../ui-bg_glass_75_ffffff_1x400.png             |   Bin 107 -> 0 bytes
 .../ui-bg_highlight-soft_75_cccccc_1x100.png    |   Bin 101 -> 0 bytes
 .../ui-bg_inset-soft_95_fef1ec_1x100.png        |   Bin 123 -> 0 bytes
 .../ui-icons_222222_256x240.png                 |   Bin 4369 -> 0 bytes
 .../ui-icons_2e83ff_256x240.png                 |   Bin 4369 -> 0 bytes
 .../ui-icons_454545_256x240.png                 |   Bin 4369 -> 0 bytes
 .../ui-icons_888888_256x240.png                 |   Bin 4369 -> 0 bytes
 .../ui-icons_cd0a0a_256x240.png                 |   Bin 4369 -> 0 bytes
 .../ui-icons_f6cf3b_256x240.png                 |   Bin 8884 -> 0 bytes
 .../src/main/resources/ui/app/assets/index.html |    46 -
 .../ui/app/assets/javascripts/ember-qunit.js    |   266 -
 .../ui/app/assets/javascripts/jquery.mockjax.js |   692 -
 .../assets/javascripts/modernizr-2.6.2.min.js   |     4 -
 .../ui/app/assets/javascripts/qunit.js          |  2495 -
 .../ui/app/assets/javascripts/sinon-1.13.0.js   |  5830 ---
 .../app/assets/javascripts/sinon-qunit-1.0.0.js |    62 -
 .../ui/app/assets/javascripts/tests.js          |    29 -
 .../ui/app/assets/stylesheets/qunit.css         |   237 -
 .../src/main/resources/ui/app/assets/tests.html |    46 -
 .../main/resources/ui/app/components/.gitkeep   |     0
 .../ui/app/components/configSection.js          |   164 -
 .../src/main/resources/ui/app/config/app.js     |    27 -
 .../src/main/resources/ui/app/config/env.js     |    33 -
 .../src/main/resources/ui/app/config/router.js  |    35 -
 .../src/main/resources/ui/app/config/store.js   |    23 -
 .../main/resources/ui/app/controllers/.gitkeep  |     0
 .../app/controllers/application_controller.js   |    27 -
 .../createAppWizard/step1_controller.js         |   251 -
 .../createAppWizard/step2_controller.js         |   136 -
 .../createAppWizard/step3_controller.js         |   250 -
 .../createAppWizard/step4_controller.js         |   176 -
 .../controllers/create_app_wizard_controller.js |   122 -
 .../slider_app/summary_controller.js            |    27 -
 .../ui/app/controllers/slider_app_controller.js |   472 -
 .../app/controllers/slider_apps_controller.js   |    35 -
 .../ui/app/controllers/slider_controller.js     |   138 -
 .../ui/app/controllers/tooltip_controller.js    |    19 -
 .../src/main/resources/ui/app/helpers/.gitkeep  |     0
 .../src/main/resources/ui/app/helpers/ajax.js   |   388 -
 .../src/main/resources/ui/app/helpers/helper.js |   169 -
 .../resources/ui/app/helpers/string_utils.js    |   163 -
 .../src/main/resources/ui/app/initialize.js     |   171 -
 .../ui/app/mappers/application_type.js          |   162 -
 .../src/main/resources/ui/app/mappers/mapper.js |    56 -
 .../ui/app/mappers/slider_apps_mapper.js        |   292 -
 .../ui/app/mixins/ajax_error_handler.js         |    82 -
 .../resources/ui/app/mixins/run_periodically.js |   109 -
 .../main/resources/ui/app/mixins/with_panels.js |    53 -
 .../src/main/resources/ui/app/models/.gitkeep   |     0
 .../resources/ui/app/models/config_property.js  |    47 -
 .../src/main/resources/ui/app/models/host.js    |    33 -
 .../main/resources/ui/app/models/slider_app.js  |   207 -
 .../resources/ui/app/models/slider_app_alert.js |   149 -
 .../ui/app/models/slider_app_component.js       |    65 -
 .../resources/ui/app/models/slider_app_type.js  |    64 -
 .../ui/app/models/slider_app_type_component.js  |    63 -
 .../resources/ui/app/models/slider_config.js    |    45 -
 .../ui/app/models/slider_quick_link.js          |    33 -
 .../resources/ui/app/models/typed_property.js   |    38 -
 .../ui/app/routes/create_app_wizard.js          |    54 -
 .../src/main/resources/ui/app/routes/main.js    |    75 -
 .../src/main/resources/ui/app/styles/app.less   |   303 -
 .../resources/ui/app/styles/application.less    |    23 -
 .../resources/ui/app/styles/application.styl    |    18 -
 .../resources/ui/app/styles/apps-table.less     |   320 -
 .../main/resources/ui/app/styles/common.less    |   109 -
 .../resources/ui/app/styles/old-bootstrap.less  |   164 -
 .../main/resources/ui/app/styles/wizard.less    |   232 -
 .../resources/ui/app/templates/application.hbs  |    56 -
 .../ui/app/templates/common/ajax_error.hbs      |    24 -
 .../ui/app/templates/common/app_tooltip.hbs     |    24 -
 .../resources/ui/app/templates/common/chart.hbs |    26 -
 .../ui/app/templates/common/config.hbs          |    37 -
 .../ui/app/templates/components/.gitkeep        |     0
 .../app/templates/components/configSection.hbs  |    78 -
 .../ui/app/templates/createAppWizard.hbs        |    43 -
 .../ui/app/templates/createAppWizard/step1.hbs  |   192 -
 .../ui/app/templates/createAppWizard/step2.hbs  |    62 -
 .../ui/app/templates/createAppWizard/step3.hbs  |    37 -
 .../ui/app/templates/createAppWizard/step4.hbs  |    41 -
 .../main/resources/ui/app/templates/index.hbs   |    21 -
 .../resources/ui/app/templates/slider_app.hbs   |    70 -
 .../ui/app/templates/slider_app/configs.hbs     |    40 -
 .../slider_app/destroy/destroy_popup.hbs        |    20 -
 .../slider_app/destroy/destroy_popup_footer.hbs |    28 -
 .../ui/app/templates/slider_app/flex_popup.hbs  |    40 -
 .../ui/app/templates/slider_app/summary.hbs     |   135 -
 .../resources/ui/app/templates/slider_apps.hbs  |    87 -
 .../ui/app/templates/slider_title_tooltip.hbs   |    27 -
 .../ui/app/templates/unavailable_apps.hbs       |    22 -
 .../src/main/resources/ui/app/translations.js   |   169 -
 .../src/main/resources/ui/app/views/.gitkeep    |     0
 .../resources/ui/app/views/application_view.js  |    70 -
 .../resources/ui/app/views/common/chart_view.js |   914 -
 .../ui/app/views/common/config_set_view.js      |    57 -
 .../ui/app/views/common/filter_view.js          |   370 -
 .../resources/ui/app/views/common/sort_view.js  |   206 -
 .../resources/ui/app/views/common/table_view.js |   418 -
 .../ui/app/views/createAppWizard/step1_view.js  |    47 -
 .../ui/app/views/createAppWizard/step2_view.js  |    33 -
 .../ui/app/views/createAppWizard/step3_view.js  |    25 -
 .../ui/app/views/createAppWizard/step4_view.js  |    24 -
 .../ui/app/views/create_app_wizard_view.js      |    80 -
 .../ui/app/views/slider_app/configs_view.js     |    57 -
 .../slider_app/destroy_modal_footer_view.js     |    41 -
 .../app/views/slider_app/destroy_popup_view.js  |    37 -
 .../views/slider_app/metrics/app_metric_view.js |    77 -
 .../views/slider_app/metrics/metric2_view.js    |    63 -
 .../views/slider_app/metrics/metric3_view.js    |    61 -
 .../views/slider_app/metrics/metric4_view.js    |    54 -
 .../app/views/slider_app/metrics/metric_view.js |    70 -
 .../ui/app/views/slider_app/summary_view.js     |   141 -
 .../resources/ui/app/views/slider_app_view.js   |    30 -
 .../resources/ui/app/views/slider_apps_view.js  |   175 -
 .../slider/src/main/resources/ui/config.js      |   123 -
 .../main/resources/ui/envs/development/env.js   |    21 -
 .../main/resources/ui/envs/production/env.js    |    21 -
 .../arraycontroller/arraycontroller.js.hbs      |    23 -
 .../generators/arraycontroller/generator.json   |    10 -
 .../ui/generators/component/component.hbs.hbs   |    19 -
 .../ui/generators/component/component.js.hbs    |    23 -
 .../ui/generators/component/generator.json      |    14 -
 .../ui/generators/controller/controller.js.hbs  |    23 -
 .../ui/generators/controller/generator.json     |    10 -
 .../ui/generators/helper/generator.json         |    10 -
 .../ui/generators/helper/helper.js.hbs          |    24 -
 .../ui/generators/model/generator.json          |    10 -
 .../resources/ui/generators/model/model.js.hbs  |    24 -
 .../ui/generators/route/generator.json          |    10 -
 .../resources/ui/generators/route/route.js.hbs  |    25 -
 .../ui/generators/template/generator.json       |    10 -
 .../ui/generators/template/template.hbs.hbs     |    19 -
 .../resources/ui/generators/view/generator.json |    10 -
 .../resources/ui/generators/view/view.js.hbs    |    23 -
 .../slider/src/main/resources/ui/karma.conf.js  |    94 -
 .../slider/src/main/resources/ui/package.json   |    38 -
 .../slider/src/main/resources/ui/runner.js      |   136 -
 .../views/slider/src/main/resources/ui/setup.js |    78 -
 .../slider/src/main/resources/ui/test/index.md  |    28 -
 .../ui/test/integration/pages/index_test.js     |   127 -
 .../integration/pages/slider_errors_test.js     |    63 -
 .../processes/create_new_app_test.js            |   358 -
 .../createAppWizard/step1_controller_test.js    |   431 -
 .../createAppWizard/step2_controller_test.js    |   403 -
 .../createAppWizard/step3_controller_test.js    |   421 -
 .../createAppWizard/step4_controller_test.js    |   440 -
 .../create_app_wizard_controller_test.js        |   201 -
 .../slider_app/summary_controller_test.js       |    36 -
 .../controllers/slider_app_controller_test.js   |   607 -
 .../controllers/slider_apps_controller_test.js  |    58 -
 .../unit/controllers/slider_controller_test.js  |   140 -
 .../unit/mappers/slider_apps_mapper_test.js     |    85 -
 .../unit/models/slider_app_component_test.js    |    51 -
 .../ui/test/unit/models/slider_app_test.js      |    95 -
 .../test/unit/views/common/table_view_test.js   |    35 -
 .../unit/views/slider_app/summary_view_test.js  |    68 -
 .../ui/vendor/scripts/common/bootstrap.js       |  1951 -
 .../ui/vendor/scripts/common/bs-basic.min.js    |     1 -
 .../ui/vendor/scripts/common/bs-button.min.js   |     1 -
 .../ui/vendor/scripts/common/bs-core.min.js     |     1 -
 .../ui/vendor/scripts/common/bs-modal.min.js    |     1 -
 .../ui/vendor/scripts/common/bs-nav.min.js      |     1 -
 .../ui/vendor/scripts/common/bs-popover.min.js  |     1 -
 .../vendor/scripts/common/console-polyfill.js   |    13 -
 .../ui/vendor/scripts/common/cubism.v1.js       |  1085 -
 .../resources/ui/vendor/scripts/common/d3.v2.js |  7033 ---
 .../vendor/scripts/common/ember-i18n-1.4.1.js   |   199 -
 .../ui/vendor/scripts/common/handlebars.js      |  2746 --
 .../ui/vendor/scripts/common/jquery.js          |  8829 ----
 .../ui/vendor/scripts/common/jquery.timeago.js  |   214 -
 .../ui/vendor/scripts/common/jquery.ui.core.js  |   334 -
 .../ui/vendor/scripts/common/jquery.ui.mouse.js |   175 -
 .../vendor/scripts/common/jquery.ui.sortable.js |  1088 -
 .../vendor/scripts/common/jquery.ui.widget.js   |   276 -
 .../ui/vendor/scripts/common/moment.min.js      |     7 -
 .../ui/vendor/scripts/common/rickshaw.js        |  2659 -
 .../resources/ui/vendor/scripts/common/tv4.js   |  1605 -
 .../ui/vendor/scripts/development/ember-data.js | 10620 ----
 .../ui/vendor/scripts/development/ember.js      | 43235 -----------------
 .../ui/vendor/scripts/production/ember-data.js  | 10626 ----
 .../ui/vendor/scripts/production/ember.js       | 41620 ----------------
 .../resources/ui/vendor/styles/bootstrap.css    |  5785 ---
 .../main/resources/ui/vendor/styles/cubism.css  |    82 -
 .../ui/vendor/styles/font-awesome-ie7.css       |  1203 -
 .../resources/ui/vendor/styles/font-awesome.css |  1479 -
 .../jquery-ui-1.8.16.custom.css                 |  1320 -
 .../resources/ui/vendor/styles/rickshaw.css     |   307 -
 .../src/main/resources/view.log4j.properties    |    27 -
 .../views/slider/src/main/resources/view.xml    |    82 -
 .../ambari/view/slider/SliderClientTest.java    |    31 -
 .../rest/client/SliderAppMasterClientTest.java  |   177 -
 260 files changed, 185176 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/pom.xml b/contrib/views/pom.xml
index 402f7cd..b4bc128 100644
--- a/contrib/views/pom.xml
+++ b/contrib/views/pom.xml
@@ -41,7 +41,6 @@
     <module>files</module>
     <module>jobs</module>
     <module>pig</module>
-    <module>slider</module>
     <module>capacity-scheduler</module>
     <module>tez</module>
     <module>hawq</module>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/docs/index.md
----------------------------------------------------------------------
diff --git a/contrib/views/slider/docs/index.md b/contrib/views/slider/docs/index.md
deleted file mode 100644
index e2329fe..0000000
--- a/contrib/views/slider/docs/index.md
+++ /dev/null
@@ -1,164 +0,0 @@
-<!---
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements.  See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License.  You may obtain a copy of the License at [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
--->
-# Slider Apps View
-
-## Security Guide
-*Slider Apps View* can optionally connect to a Kerberos secured cluster by following the below steps.
-
-### Step-1: Deploy a HDP cluster and secure it using *Kerberos*
-After deploying a HDP cluster through Ambari, it can be secured by using the *Enable Security* button in *Admin > Seurity* page.
-
-### Step-2: Create *Kerberos* principal for view
-We need to provide a *Kerberos* identity for the process in which the view is run. We shall identify the user as `view-principal`. **In this document `view-principal` can be changed to any suitable name.** Since views are generally hosted by Ambari server, typically this can be named as *ambari*.
-
-On the machine where *KDC Server* is hosted, create user principal by running below command
-
-```
-kadmin.local -q "addprinc -randkey view-principal@EXAMPLE.COM"
-```
-Next, extract keytab file 
-
-```
-kadmin.local -q "xst -k /path/to/keytab/view-principal.headless.keytab view-principal@EXAMPLE.COM"
-```
-The keytab file should then be copied over to the keytabs location on the host where the view is hosted.
-
-```
-cp /path/to/keytab/view-principal.headless.keytab /etc/security/keytabs/
-```
-
-Change file permissions so that only necessary users can access it.
-
-```
-chmod 440 /etc/security/keytabs/view-principal.headless.keytab
-```
-
-If the view is hosted by *ambari-server*, its Kerberos identity can be set by running the below command.
-
-```
-ambari-server setup-security
-```
-During *setup-security* the `view-principal` user should be provided along with the keytab. These same values will be provided as view parameters in *Step-4*.
-
-
-### Step-3: Configure *proxyuser* for created principal
-Add the following configurations in *Custom core-site* section of *HDFS* service.
-
-* hadoop.proxyuser.`view-principal`.groups = *
-* hadoop.proxyuser.`view-principal`.hosts = `view-server-host`
-
-This will in-turn show up in *core-site.xml* as
-
-```
-<property>
-  <name>hadoop.proxyuser.view-principal.groups</name>
-  <value>*</value>
-</property>
-
-<property>
-  <name>hadoop.proxyuser.view-principal.hosts</name>
-  <value>view-server-host.ambari.apache.org</value>
-</property>
-```
-Restart HDFS and YARN services.
-
-### Step-4: Create *Slider Apps View* with security parameters
-
-From *Ambari-Admin* create a *Slider Apps View* with the below parameters populated
-
-* slider.security.enabled = true
-* view.kerberos.principal = `view-principal`
-* view.kerberos.principal.keytab = `/etc/security/keytabs/view-principal.headless.keytab`
-
-### Step-5 Create *Kerberos* principal for *slider.user*
-We need to provide a *Kerberos* identity for the user identified in *slider.user* view parameter. 
-
-The *slider.user* view parameter has the following interpretations:
-
-* If the parameter is left blank, it means the user *yarn*. 
-* If it is `${username}`, it is the user logged into Ambari. 
-* Else, it is exact name of the user. 
-
-We shall assume the user as `slider-user`. In a secured cluster this user has to actually exist on all the hosts. The user should also have an *uid* greater than 1000.
-
-On the machine where *KDC Server* is hosted, create user principal by running below command
-
-```
-kadmin.local -q "addprinc -randkey slider-user@EXAMPLE.COM"
-```
-Next, extract keytab file 
-
-```
-kadmin.local -q "xst -k /path/to/keytab/slider-user.headless.keytab slider-user@EXAMPLE.COM"
-```
-The keytab file should then be copied over to the keytabs location on the host where the view is hosted.
-
-```
-cp /path/to/keytab/slider-user.headless.keytab /etc/security/keytabs/
-```
-
-Change file permissions so that only necessary users can access it.
-
-**Make sure that `slider-user` keytab is at /etc/security/keytabs/`slider-user`.headless.keytab**
-
-### Step-6 Create *Kerberos* principals for App launched by  *slider.user*
-Slider Apps contain services, and they might need their own identities when talking to HDFS and YARN. To support such Apps, keytabs have to be created that are required specifically for the Apps. Each keytab should contain the identity of the principal on all hosts where the application can run.
-
-By default, the following keytabs have to be created for specific Apps. This user has to exist on all hosts where containers are run:
-#### HBase
-For each host `host-name` in the cluster, do the following 
-
-* 
-```
-kadmin.local -q "addprinc -randkey slider-user/[host-name]@EXAMPLE.COM"
-```
-Next, extract identities on all hosts into a single keytab file 
-
-* 
-```
-kadmin.local -q "xst -k /path/to/keytab/slider-user.HBASE.service.keytab slider-user/[host-name]@EXAMPLE.COM"
-```
-
-The keytab file containing multiple identities should then be copied over to the keytabs location on the host where the view is hosted.
-
-```
-cp /path/to/keytab/slider-user.HBASE.service.keytab /etc/security/keytabs/
-```
-
-Change file permissions so that only necessary users can access it.
-
-#### Storm
-For each host `host-name` in the cluster, do the following 
-
-* 
-```
-kadmin.local -q "addprinc -randkey slider-user/[host-name]@EXAMPLE.COM"
-```
-Next, extract all identities into a single keytab file 
-
-* 
-```
-kadmin.local -q "xst -k /path/to/keytab/slider-user.STORM.nimbus.keytab slider-user/[host-name]@EXAMPLE.COM"
-kadmin.local -q "xst -k /path/to/keytab/slider-user.STORM.client.keytab slider-user@EXAMPLE.COM"
-```
-
-The keytab file containing multiple identities should then be copied over to the keytabs location on the host where the view is hosted.
-
-```
-cp /path/to/keytab/slider-user.STORM.nimbus.keytab /etc/security/keytabs/
-cp /path/to/keytab/slider-user.STORM.client.keytab /etc/security/keytabs/
-```
-
-Change file permissions so that only necessary users can access it.

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/gzip-content.cmd
----------------------------------------------------------------------
diff --git a/contrib/views/slider/gzip-content.cmd b/contrib/views/slider/gzip-content.cmd
deleted file mode 100644
index 21838f8..0000000
--- a/contrib/views/slider/gzip-content.cmd
+++ /dev/null
@@ -1,17 +0,0 @@
-@echo off
-rem Licensed to the Apache Software Foundation (ASF) under one or more
-rem contributor license agreements.  See the NOTICE file distributed with
-rem this work for additional information regarding copyright ownership.
-rem The ASF licenses this file to You under the Apache License, Version 2.0
-rem (the "License"); you may not use this file except in compliance with
-rem the License.  You may obtain a copy of the License at
-rem
-rem     http://www.apache.org/licenses/LICENSE-2.0
-rem
-rem Unless required by applicable law or agreed to in writing, software
-rem distributed under the License is distributed on an "AS IS" BASIS,
-rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-rem See the License for the specific language governing permissions and
-rem limitations under the License.
-
-powershell -File %~dpn0.ps1 %* < NUL
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/gzip-content.ps1
----------------------------------------------------------------------
diff --git a/contrib/views/slider/gzip-content.ps1 b/contrib/views/slider/gzip-content.ps1
deleted file mode 100644
index a6042a1..0000000
--- a/contrib/views/slider/gzip-content.ps1
+++ /dev/null
@@ -1,81 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-# Stop on all errors
-$ErrorActionPreference = 'Stop';
-
-Function Gzip-File{
-   Param(
-        $inFile,
-        $outFile = ($inFile + ".gz"),
-        $force = $false
-        )
-  if(-not (Test-Path $inFile)) {
-    Write-Host "$inFile does not exist"
-    return $false
-  }
-  if((Test-Path $outFile)) {
-    if(-not $force) {
-      Write-Host "$outFile already exists"
-      return $true
-    } else {
-      Remove-Item $outFile
-    }
-  }
-  $inputStream = New-Object System.IO.FileStream $inFile, ([IO.FileMode]::Open), ([IO.FileAccess]::Read), ([IO.FileShare]::Read)
-  $outputStream = New-Object System.IO.FileStream $outFile, ([IO.FileMode]::Create), ([IO.FileAccess]::Write), ([IO.FileShare]::None)
-  $gzipStream = New-Object System.IO.Compression.GzipStream $outputStream, ([IO.Compression.CompressionMode]::Compress)
-
-  $buffer = New-Object byte[](1024)
-  while($true){
-    $read = $inputStream.Read($buffer, 0, 1024)
-    if ($read -le 0){break}
-    $gzipStream.Write($buffer, 0, $read)
-  }
-  $gzipStream.Close()
-  $outputStream.Close()
-  $inputStream.Close()
-  Remove-Item $inFile
-  return $true
-}
-
-$errorFound = $false
-$files = @()
-$force = $false
-ForEach ($arg in $args) {
-  if($arg -eq "-f" -or $arg -eq "--force") {
-    $force = $true
-    continue
-  }
-  $files += $arg
-}
-
-ForEach ($file in $files) {
-  $input = $file
-  $output = $file + ".gz";
-  Write-Host "Running: Gzip-File $input $output $force"
-  $success = Gzip-File $input $output $force
-  if(-not $success) {
-    $errorFound = $true
-  }
-}
-
-if ($errorFound) {
-  throw "Failed to gzip all files!"
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/slider/pom.xml b/contrib/views/slider/pom.xml
deleted file mode 100644
index 21afd3d..0000000
--- a/contrib/views/slider/pom.xml
+++ /dev/null
@@ -1,463 +0,0 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
-	license agreements. See the NOTICE file distributed with this work for additional
-	information regarding copyright ownership. The ASF licenses this file to
-	You under the Apache License, Version 2.0 (the "License"); you may not use
-	this file except in compliance with the License. You may obtain a copy of
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
-	by applicable law or agreed to in writing, software distributed under the
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-	OF ANY KIND, either express or implied. See the License for the specific
-	language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.ambari.contrib.views</groupId>
-  <artifactId>slider</artifactId>
-  <version>2.0.0.0-SNAPSHOT</version>
-  <name>Slider</name>
-
-  <parent>
-    <groupId>org.apache.ambari.contrib.views</groupId>
-    <artifactId>ambari-contrib-views</artifactId>
-    <version>2.0.0.0-SNAPSHOT</version>
-  </parent>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.slider</groupId>
-      <artifactId>slider-core</artifactId>
-      <version>${slider.version}</version>
-      <exclusions>
-        <exclusion>
-          <groupId>org.apache.hadoop</groupId>
-          <artifactId>hadoop-yarn-api</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.slider</groupId>
-      <artifactId>slider-agent</artifactId>
-      <version>${slider.version}</version>
-      <type>tar.gz</type>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.easymock</groupId>
-      <artifactId>easymock</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>commons-configuration</groupId>
-      <artifactId>commons-configuration</artifactId>
-      <version>${commons-configuration.version}</version>
-      <exclusions>
-        <exclusion>
-          <groupId>commons-logging</groupId>
-          <artifactId>commons-logging</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>commons-lang</groupId>
-          <artifactId>commons-lang</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>commons-logging</groupId>
-          <artifactId>commons-logging</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-      <version>${commons-lang.version}</version>
-      <exclusions>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.httpcomponents</groupId>
-      <artifactId>httpclient</artifactId>
-      <version>${httpclient.version}</version>
-      <exclusions>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.ambari</groupId>
-      <artifactId>ambari-views</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-compress</artifactId>
-      <version>${commons-compress.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.google.inject</groupId>
-      <artifactId>guice</artifactId>
-      <version>${guice.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.googlecode.json-simple</groupId>
-      <artifactId>json-simple</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.sun.jersey</groupId>
-      <artifactId>jersey-core</artifactId>
-      <version>${jersey.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.sun.jersey</groupId>
-      <artifactId>jersey-client</artifactId>
-      <version>${jersey.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.sun.jersey.contribs</groupId>
-      <artifactId>jersey-guice</artifactId>
-      <version>${jersey.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.sun.jersey</groupId>
-      <artifactId>jersey-json</artifactId>
-      <version>${jersey.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.sun.jersey</groupId>
-      <artifactId>jersey-server</artifactId>
-      <version>${jersey.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-      <version>${commons-io.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.ambari.contrib.views</groupId>
-      <artifactId>ambari-views-utils</artifactId>
-      <version>2.0.0.0-SNAPSHOT</version>
-    </dependency>
-  </dependencies>
-
-  <properties>
-    <ambari.dir>${project.parent.parent.parent.basedir}</ambari.dir>
-    <nodejs.directory>${basedir}/target/nodejs</nodejs.directory>
-    <npm.version>1.4.3</npm.version>
-    <ui.directory>${basedir}/src/main/resources/ui</ui.directory>
-    <commons-configuration.version>1.6</commons-configuration.version>
-    <commons-lang.version>2.6</commons-lang.version>
-    <commons-compress.version>1.9</commons-compress.version>
-    <httpclient.version>4.5.2</httpclient.version>
-    <slider.version>0.81.0-incubating-SNAPSHOT</slider.version>
-    <guice.version>3.0</guice.version>
-    <jackson.version>1.9.13</jackson.version>
-    <jersey.version>1.9</jersey.version>
-    <commons-io.version>2.4</commons-io.version>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2.1</version>
-        <executions>
-          <execution>
-            <id>clean-rmdir</id>
-            <phase>clean</phase>
-            <goals>
-              <goal>exec</goal>
-            </goals>
-            <configuration>
-              <executable>${executable.rmdir}</executable>
-              <workingDirectory>${ui.directory}</workingDirectory>
-              <commandlineArgs>${args.rm.clean} public node_modules</commandlineArgs>
-              <successCodes>
-                <successCode>0</successCode>
-                <successCode>1</successCode>
-                <successCode>2</successCode>
-              </successCodes>
-            </configuration>
-          </execution>
-          <execution>
-            <id>clean-mkdir</id>
-            <phase>clean</phase>
-            <goals>
-              <goal>exec</goal>
-            </goals>
-            <configuration>
-              <executable>${executable.mkdir}</executable>
-              <workingDirectory>${ui.directory}</workingDirectory>
-              <commandlineArgs>${args.mkdir} public</commandlineArgs>
-            </configuration>
-          </execution>
-          <execution>
-            <id>slider-ui-compile-npm</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>exec</goal>
-            </goals>
-            <configuration>
-              <executable>${executable.npm}</executable>
-              <workingDirectory>${ui.directory}</workingDirectory>
-              <commandlineArgs>${args.npm} install</commandlineArgs>
-            </configuration>
-          </execution>
-          <execution>
-            <id>slider-ui-compile-brunch</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>exec</goal>
-            </goals>
-            <configuration>
-              <executable>${executable.brunch}</executable>
-              <workingDirectory>${ui.directory}</workingDirectory>
-              <commandlineArgs>${args.brunch} build</commandlineArgs>
-            </configuration>
-          </execution>
-          <execution>
-            <id>slider-ui-test</id>
-            <phase>test</phase>
-            <goals>
-              <goal>exec</goal>
-            </goals>
-            <configuration>
-              <skip>${skipTests}</skip>
-              <executable>${executable.npm}</executable>
-              <workingDirectory>${ui.directory}</workingDirectory>
-              <commandlineArgs>${args.npm} test</commandlineArgs>
-              <environmentVariables>
-                <PYTHON>${executable.python}</PYTHON>
-              </environmentVariables>
-            </configuration>
-          </execution>
-          <execution>
-            <id>gzip ambari-web content</id>
-            <phase>prepare-package</phase>
-            <goals>
-              <goal>exec</goal>
-            </goals>
-            <configuration>
-              <executable>${executable.gzip}</executable>
-              <workingDirectory>${ui.directory}</workingDirectory>
-              <arguments>
-                <argument>-f</argument>
-                <argument>public/javascripts/app.js</argument>
-                <argument>public/javascripts/vendor.js</argument>
-                <argument>public/stylesheets/app.css</argument>
-              </arguments>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-<!--
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-antrun-plugin</artifactId>
-        <version>1.7</version>
-        <executions>
-           <execution>
-            <id>prepare-package</id>
-            <phase>prepare-package</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <target name="slider-ui-prepare-package">
-                <copy toDir="${project.build.directory}/ambari-server-${project.version}-dist/ambari-server-${project.version}/web/">
-                    <fileset dir="${ui.directory}/../ambari-web/public"/> </copy>
-              </target>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
--->
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <version>3.1</version>
-        <configuration>
-          <source>1.6</source>
-          <target>1.6</target>
-        </configuration>
-      </plugin>
-      <plugin>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>copy-dependencies</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>copy-dependencies</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>${project.build.directory}/lib</outputDirectory>
-              <includeScope>runtime</includeScope>
-              <excludeArtifactIds>slider-agent</excludeArtifactIds>
-            </configuration>
-          </execution>
-          <execution>
-            <id>copy-slider-agent-with-rename</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>copy-dependencies</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>${project.build.directory}/lib</outputDirectory>
-              <includeScope>runtime</includeScope>
-              <stripVersion>true</stripVersion>
-              <includeArtifactIds>slider-agent</includeArtifactIds>
-            </configuration>
-          </execution>
-          <execution>
-            <id>copy-artifact</id>
-            <phase>package</phase>
-            <goals>
-              <goal>copy</goal>
-            </goals>
-            <configuration>
-              <artifactItems>
-                <artifactItem>
-                  <groupId>${project.groupId}</groupId>
-                  <artifactId>${project.artifactId}</artifactId>
-                  <version>${project.version}</version>
-                  <type>${project.packaging}</type>
-                </artifactItem>
-              </artifactItems>
-              <outputDirectory>${views.jars.dir.rel}</outputDirectory>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.vafer</groupId>
-        <artifactId>jdeb</artifactId>
-        <version>1.0.1</version>
-        <executions>
-          <execution>
-            <phase>none</phase>
-            <goals>
-              <goal>jdeb</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <skip>true</skip>
-          <submodules>false</submodules>
-        </configuration>
-      </plugin>
-    </plugins>
-    <resources>
-      <resource>
-        <directory>src/main/resources</directory>
-        <filtering>true</filtering>
-        <includes>
-          <include>slider.properties</include>
-        </includes>
-      </resource>
-      <resource>
-        <directory>src/main/resources/</directory>
-        <filtering>false</filtering>
-        <includes>
-          <include>view.xml</include>
-          <include>view.log4j.properties</include>
-        </includes>
-      </resource>
-      <resource>
-        <directory>src/main/resources/ui/public</directory>
-        <filtering>false</filtering>
-      </resource>
-      <resource>
-        <targetPath>WEB-INF/lib</targetPath>
-        <filtering>false</filtering>
-        <directory>target/lib</directory>
-      </resource>
-    </resources>
-    <pluginManagement>
-      <plugins>
-        <!--This plugin's configuration is used to store Eclipse m2e settings
-            only. It has no influence on the Maven build itself. -->
-        <plugin>
-          <groupId>org.eclipse.m2e</groupId>
-          <artifactId>lifecycle-mapping</artifactId>
-          <version>1.0.0</version>
-          <configuration>
-            <lifecycleMappingMetadata>
-              <pluginExecutions>
-                <pluginExecution>
-                  <pluginExecutionFilter>
-                    <groupId>
-                      org.codehaus.mojo
-                    </groupId>
-                    <artifactId>
-                      exec-maven-plugin
-                    </artifactId>
-                    <versionRange>
-                      [1.2.1,)
-                    </versionRange>
-                    <goals>
-                      <goal>exec</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <ignore></ignore>
-                  </action>
-                </pluginExecution>
-              </pluginExecutions>
-            </lifecycleMappingMetadata>
-          </configuration>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
-  <profiles>
-    <profile>
-      <id>windows</id>
-      <activation>
-        <os>
-          <family>win</family>
-        </os>
-      </activation>
-      <properties>
-        <envClassifier>win</envClassifier>
-        <dirsep>\</dirsep>
-        <executable.python>python</executable.python>
-        <executable.brunch>cmd</executable.brunch>
-        <args.brunch>/C brunch</args.brunch>
-        <executable.gzip>${project.basedir}\gzip-content.cmd</executable.gzip>
-        <executable.mkdir>cmd</executable.mkdir>
-        <args.mkdir>/C mkdir</args.mkdir>
-        <executable.npm>cmd</executable.npm>
-        <args.npm>/C npm</args.npm>
-        <executable.rmdir>cmd</executable.rmdir>
-        <args.rm.clean>/C rmdir /S /Q</args.rm.clean>
-        <executable.shell>cmd</executable.shell>
-        <fileextension.shell>cmd</fileextension.shell>
-      </properties>
-    </profile>
-    <profile>
-      <id>linux</id>
-      <activation>
-        <os>
-          <family>unix</family>
-        </os>
-      </activation>
-      <properties>
-        <envClassifier>linux</envClassifier>
-        <dirsep>/</dirsep>
-        <executable.python>${project.basedir}/../ambari-common/src/main/unix/ambari-python-wrap</executable.python>
-        <executable.brunch>brunch</executable.brunch>
-        <args.brunch></args.brunch>
-        <executable.gzip>gzip</executable.gzip>
-        <executable.mkdir>mkdir</executable.mkdir>
-        <args.mkdir></args.mkdir>
-        <executable.npm>npm</executable.npm>
-        <args.npm></args.npm>
-        <executable.rmdir>rm</executable.rmdir>
-        <args.rm.clean>-rf</args.rm.clean>
-        <executable.shell>sh</executable.shell>
-        <fileextension.shell>sh</fileextension.shell>
-      </properties>
-    </profile>
-  </profiles>
-</project>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/AlertField.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/AlertField.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/AlertField.java
deleted file mode 100644
index 40fd97f..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/AlertField.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider;
-
-public enum AlertField {
-  /**
-   * Description of a service
-   */
-  description,
-  /**
-   * Host name where to which service belongs
-   */
-  host_name,
-  /**
-   * Last status
-   */
-  last_status,
-  /**
-   * Time when last status was checked
-   */
-  last_status_time,
-  /**
-   * Service
-   */
-  service_name,
-  /**
-   * Component name
-   */
-  component_name,
-  /**
-   * Same, as actual_status and last_status
-   */
-  status,
-  /**
-   * Time when status was checked
-   */
-  status_time,
-  /**
-   * Not yet used, for future purpose
-   */
-  output,
-  /**
-   * Same, as status and last_status
-   */
-  actual_status
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/AlertState.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/AlertState.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/AlertState.java
deleted file mode 100644
index d239394..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/AlertState.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider;
-
-
-public enum AlertState {
-  /**
-   * Alert does not need to be distributed.  Normal Operation.
-   */
-  OK,
-  /**
-   * Alert indicates there may be an issue.  The component may be operating
-   * normally but may be in danger of becoming <code>CRITICAL</code>.
-   */
-  WARNING,
-  /**
-   * Indicates there is a critical situation that needs to be addressed.
-   */
-  CRITICAL,
-  /**
-   * The state of the alert is not known.
-   */
-  UNKNOWN
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/MetricsHolder.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/MetricsHolder.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/MetricsHolder.java
deleted file mode 100644
index 212092e..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/MetricsHolder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider;
-
-import org.apache.ambari.view.slider.rest.client.Metric;
-
-import java.util.Map;
-
-public class MetricsHolder {
-  private Map<String, Map<String, Map<String, Metric>>> jmxMetrics;
-  private Map<String, Map<String, Map<String, Metric>>> timelineMetrics;
-
-  public Map<String, Map<String, Map<String, Metric>>> getJmxMetrics() {
-    return jmxMetrics;
-  }
-
-  public void setJmxMetrics(Map<String, Map<String, Map<String, Metric>>> jmxMetrics) {
-    this.jmxMetrics = jmxMetrics;
-  }
-
-  public Map<String, Map<String, Map<String, Metric>>> getTimelineMetrics() {
-    return timelineMetrics;
-  }
-
-  public void setTimelineMetrics(Map<String, Map<String, Map<String, Metric>>> timelineMetrics) {
-    this.timelineMetrics = timelineMetrics;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderApp.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderApp.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderApp.java
deleted file mode 100644
index 25b1e17..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderApp.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider;
-
-import java.util.List;
-import java.util.Map;
-
-public class SliderApp {
-  public static final String STATE_FROZEN = "FROZEN";
-
-  private String id;
-  private String yarnId;
-  private String name;
-  private String appVersion;
-  private String description;
-  private String type;
-  private String typeId;
-  private String user;
-  private String state;
-  private String diagnostics;
-  private long startTime;
-  private long endTime;
-  private Map<String, String> jmx;
-  private Map<String, String> urls;
-  private Map<String, Map<String, String>> configs;
-  private Map<String, SliderAppComponent> components;
-  private Map<String, Number[][]> metrics;
-  private Map<String, Object> alerts;
-  private List<String> supportedMetrics;
-
-  public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public String getYarnId() {
-    return yarnId;
-  }
-
-  public void setYarnId(String yarnId) {
-    this.yarnId = yarnId;
-  }
-
-  public String getType() {
-    return type;
-  }
-
-  public void setType(String type) {
-    this.type = type;
-  }
-
-  public String getUser() {
-    return user;
-  }
-
-  public void setUser(String user) {
-    this.user = user;
-  }
-
-  public String getState() {
-    return state;
-  }
-
-  public void setState(String state) {
-    this.state = state;
-  }
-
-  public String getDiagnostics() {
-    return diagnostics;
-  }
-
-  public void setDiagnostics(String diagnostics) {
-    this.diagnostics = diagnostics;
-  }
-
-  public Map<String, String> getJmx() {
-    return jmx;
-  }
-
-  public void setJmx(Map<String, String> jmx) {
-    this.jmx = jmx;
-  }
-
-  public Map<String, String> getUrls() {
-    return urls;
-  }
-
-  public void setUrls(Map<String, String> urls) {
-    this.urls = urls;
-  }
-
-  public Map<String, Map<String, String>> getConfigs() {
-    return configs;
-  }
-
-  public void setConfigs(Map<String, Map<String, String>> configs) {
-    this.configs = configs;
-  }
-
-  public Map<String, SliderAppComponent> getComponents() {
-    return components;
-  }
-
-  public void setComponents(Map<String, SliderAppComponent> components) {
-    this.components = components;
-  }
-
-  public Map<String, Number[][]> getMetrics() {
-    return metrics;
-  }
-
-  public void setMetrics(Map<String, Number[][]> metrics) {
-    this.metrics = metrics;
-  }
-
-  public List<String> getSupportedMetrics() {
-    return supportedMetrics;
-  }
-
-  public void setSupportedMetrics(List<String> supportedMetrics) {
-    this.supportedMetrics = supportedMetrics;
-  }
-
-  public long getStartTime() {
-    return startTime;
-  }
-
-  public void setStartTime(long startTime) {
-    this.startTime = startTime;
-  }
-
-  public long getEndTime() {
-    return endTime;
-  }
-
-  public void setEndTime(long endTime) {
-    this.endTime = endTime;
-  }
-
-  public String getDescription() {
-    return description;
-  }
-
-  public void setDescription(String description) {
-    this.description = description;
-  }
-
-  public String getAppVersion() {
-    return appVersion;
-  }
-
-  public void setAppVersion(String appVersion) {
-    this.appVersion = appVersion;
-  }
-
-  public Map<String, Object> getAlerts() {
-    return alerts;
-  }
-
-  public void setAlerts(Map<String, Object> alerts) {
-    this.alerts = alerts;
-  }
-
-  public String getTypeId() {
-    return typeId;
-  }
-
-  public void setTypeId(String typeId) {
-    this.typeId = typeId;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppComponent.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppComponent.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppComponent.java
deleted file mode 100644
index 2d86085..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppComponent.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider;
-
-import java.util.Map;
-
-public class SliderAppComponent {
-	private String componentName;
-	private int instanceCount;
-	private Map<String, Map<String, String>> activeContainers;
-	private Map<String, Map<String, String>> completedContainers;
-
-	public String getComponentName() {
-		return componentName;
-	}
-
-	public void setComponentName(String componentName) {
-		this.componentName = componentName;
-	}
-
-	public int getInstanceCount() {
-		return instanceCount;
-	}
-
-	public void setInstanceCount(int instanceCount) {
-		this.instanceCount = instanceCount;
-	}
-
-	public Map<String, Map<String, String>> getActiveContainers() {
-		return activeContainers;
-	}
-
-	public void setActiveContainers(
-	    Map<String, Map<String, String>> activeContainers) {
-		this.activeContainers = activeContainers;
-	}
-
-	public Map<String, Map<String, String>> getCompletedContainers() {
-		return completedContainers;
-	}
-
-	public void setCompletedContainers(
-	    Map<String, Map<String, String>> completedContainers) {
-		this.completedContainers = completedContainers;
-	}
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppType.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppType.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppType.java
deleted file mode 100644
index 99d1c3f..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppType.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider;
-
-import java.util.List;
-import java.util.Map;
-
-import com.google.gson.JsonObject;
-
-public class SliderAppType {
-  private String id;
-  private String typeName;
-  private String typeVersion;
-  private String typeDescription;
-  Map<String, String> typeConfigsUnsecured;
-  Map<String, String> typeConfigsSecured;
-  private Map<String, String> typeConfigs;
-  private List<SliderAppTypeComponent> typeComponents;
-  private String typePackageFileName;
-  private List<String> supportedMetrics;
-  JsonObject resourcesSecured;
-  JsonObject resourcesUnsecured;
-
-  public List<String> getSupportedMetrics() {
-    return supportedMetrics;
-  }
-
-  public void setSupportedMetrics(List<String> supportedMetrics) {
-    this.supportedMetrics = supportedMetrics;
-  }
-
-  public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public String getTypeName() {
-    return typeName;
-  }
-
-  public void setTypeName(String name) {
-    this.typeName = name;
-  }
-
-  public String getTypeDescription() {
-    return typeDescription;
-  }
-
-  public void setTypeDescription(String description) {
-    this.typeDescription = description;
-  }
-
-  public Map<String, String> getTypeConfigs() {
-    return typeConfigs;
-  }
-
-  public void setTypeConfigs(Map<String, String> configs) {
-    this.typeConfigs = configs;
-  }
-
-  public List<SliderAppTypeComponent> getTypeComponents() {
-    return typeComponents;
-  }
-
-  public void setTypeComponents(List<SliderAppTypeComponent> components) {
-    this.typeComponents = components;
-  }
-
-  public String getTypeVersion() {
-    return typeVersion;
-  }
-
-  public void setTypeVersion(String version) {
-    this.typeVersion = version;
-  }
-
-  public String getTypePackageFileName() {
-    return typePackageFileName;
-  }
-
-  public void setTypePackageFileName(String typePackageFileName) {
-    this.typePackageFileName = typePackageFileName;
-  }
-
-  public String uniqueName() {
-    return getTypeName() + "-" + getTypeVersion();
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppTypeComponent.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppTypeComponent.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppTypeComponent.java
deleted file mode 100644
index aa6c922..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppTypeComponent.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider;
-
-public class SliderAppTypeComponent {
-	private String id;
-	private String name;
-	private String category;
-	private String displayName;
-	private int priority;
-	private int instanceCount;
-	private int maxInstanceCount;
-	private int yarnMemory;
-	private int yarnCpuCores;
-
-	public String getId() {
-		return id;
-	}
-
-	public void setId(String id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getDisplayName() {
-		return displayName;
-	}
-
-	public void setDisplayName(String displayName) {
-		this.displayName = displayName;
-	}
-
-	public int getPriority() {
-		return priority;
-	}
-
-	public void setPriority(int priority) {
-		this.priority = priority;
-	}
-
-	public int getInstanceCount() {
-		return instanceCount;
-	}
-
-	public void setInstanceCount(int instanceCount) {
-		this.instanceCount = instanceCount;
-	}
-
-	public int getYarnMemory() {
-		return yarnMemory;
-	}
-
-	public void setYarnMemory(int yarnMemory) {
-		this.yarnMemory = yarnMemory;
-	}
-
-	public int getYarnCpuCores() {
-		return yarnCpuCores;
-	}
-
-	public void setYarnCpuCores(int yarnCpuCores) {
-		this.yarnCpuCores = yarnCpuCores;
-	}
-
-	public int getMaxInstanceCount() {
-		return maxInstanceCount;
-	}
-
-	public void setMaxInstanceCount(int maxInstanceCount) {
-		this.maxInstanceCount = maxInstanceCount;
-	}
-
-	public String getCategory() {
-		return category;
-	}
-
-	public void setCategory(String category) {
-		this.category = category;
-	}
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppTypesResourceProvider.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppTypesResourceProvider.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppTypesResourceProvider.java
deleted file mode 100644
index 2167748..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppTypesResourceProvider.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider;
-
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.ambari.view.NoSuchResourceException;
-import org.apache.ambari.view.ReadRequest;
-import org.apache.ambari.view.ResourceAlreadyExistsException;
-import org.apache.ambari.view.ResourceProvider;
-import org.apache.ambari.view.SystemException;
-import org.apache.ambari.view.UnsupportedPropertyException;
-import org.apache.hadoop.yarn.exceptions.YarnException;
-
-import com.google.inject.Inject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class SliderAppTypesResourceProvider implements
-    ResourceProvider<SliderAppType> {
-
-	private static final Logger logger = LoggerFactory
-	    .getLogger(SliderAppTypesResourceProvider.class);
-	@Inject
-	private SliderAppsViewController sliderController;
-
-	@Override
-	public void createResource(String resourceId, Map<String, Object> properties)
-	    throws SystemException, ResourceAlreadyExistsException,
-	    NoSuchResourceException, UnsupportedPropertyException {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	public boolean deleteResource(String resourceId) throws SystemException,
-	    NoSuchResourceException, UnsupportedPropertyException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public SliderAppType getResource(String appTypeId, Set<String> properties)
-	    throws SystemException, NoSuchResourceException,
-	    UnsupportedPropertyException {
-			SliderAppType sliderAppType = sliderController.getSliderAppType(appTypeId,
-			    properties);
-			if (sliderAppType == null)
-				throw new NoSuchResourceException(appTypeId);
-			return sliderAppType;
-	}
-
-	@Override
-	public Set<SliderAppType> getResources(ReadRequest request)
-	    throws SystemException, NoSuchResourceException,
-	    UnsupportedPropertyException {
-		Set<SliderAppType> appSet = new HashSet<SliderAppType>();
-			List<SliderAppType> sliderAppTypes = sliderController.getSliderAppTypes(request
-			    .getPropertyIds());
-            if (sliderAppTypes != null) {
-              for (SliderAppType app : sliderAppTypes)
-                appSet.add(app);
-            }
-		return appSet;
-	}
-
-	@Override
-	public boolean updateResource(String resourceId,
-	    Map<String, Object> properties) throws SystemException,
-	    NoSuchResourceException, UnsupportedPropertyException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsAlerts.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsAlerts.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsAlerts.java
deleted file mode 100644
index 375e294..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsAlerts.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider;
-
-import com.google.inject.Singleton;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.lang.Exception;
-import java.util.*;
-
-@Singleton
-public class SliderAppsAlerts {
-  private static final Logger logger = LoggerFactory
-     .getLogger(SliderAppsAlerts.class);
-
-  public Map<String, Object> generateComponentsAlerts(Map<String, SliderAppComponent> components, String service){
-     HashMap<String, Object> result = new HashMap<String, Object>();
-     Set<Map<AlertField,Object>> details = buildAlertsDetails(components, service);
-
-    result.put("detail", details);
-    result.put("summary", buildAlertsSummary(details));
-
-    return result;
-  }
-
-  private Map<AlertState,Integer> buildAlertsSummary(Set<Map<AlertField,Object>> details){
-    Map<AlertState,Integer> result = new HashMap<AlertState, Integer>();
-
-    // Initial filling of map with available states
-    for (AlertState state:AlertState.values()){
-      result.put(state, 0);
-    }
-
-    for(Map<AlertField,Object> item:details){
-      AlertState state = (AlertState)item.get(AlertField.status);
-      result.put(state,result.get(state)+1);
-    }
-    return result;
-  }
-
-  private Set<Map<AlertField,Object>> buildAlertsDetails(Map<String, SliderAppComponent> components, String service){
-    HashSet<Map<AlertField,Object>> resultList = new HashSet<Map<AlertField, Object>>();
-    for (String componentKey:components.keySet()){
-      resultList.add(buildComponentAlert(components.get(componentKey), service));
-    }
-    return  resultList;
-  }
-
-  private Map<AlertField,Object> buildComponentAlert(SliderAppComponent component, String service){
-    HashMap<AlertField,Object> alertItem = new HashMap<AlertField, Object>();
-    Date date = Calendar.getInstance().getTime();
-
-    int totalContainerCount = component.getInstanceCount();
-    int activeContainerCount = component.getActiveContainers() != null ? component
-        .getActiveContainers().size() : 0;
-    AlertState state = AlertState.UNKNOWN;
-    String message = String.format("%s out of %s active", activeContainerCount,
-        totalContainerCount);
-    if (totalContainerCount == activeContainerCount || totalContainerCount < 1) {
-      // Everything OK
-      state = AlertState.OK;
-    } else {
-      float fraction = (float) activeContainerCount / (float) totalContainerCount;
-      if (fraction <= 0.2) { // less than or equal to 20%
-        state = AlertState.WARNING;
-      } else {
-        state = AlertState.CRITICAL;
-      }
-    }
-    alertItem.put(AlertField.description, String.format("%s component",component.getComponentName()));
-    alertItem.put(AlertField.host_name, getComponentHostName(component));
-    alertItem.put(AlertField.last_status, state);
-
-    alertItem.put(AlertField.last_status_time, new java.sql.Timestamp(date.getTime()));
-
-    alertItem.put(AlertField.service_name, service.toUpperCase());
-    alertItem.put(AlertField.component_name, component.getComponentName());
-    alertItem.put(AlertField.status, state);
-    alertItem.put(AlertField.status_time, new java.sql.Timestamp(date.getTime()));
-    alertItem.put(AlertField.output, message);
-    alertItem.put(AlertField.actual_status, state);
-    return alertItem;
-  }
-
-  @SuppressWarnings("unchecked")
-  private String getComponentHostName(SliderAppComponent component){
-    Map<String,Map<String,String>> containers = null;
-
-    if (component.getActiveContainers().size() > 0){
-      containers = component.getActiveContainers();
-    }
-
-    if (component.getCompletedContainers().size() > 0 && containers == null) {
-      containers =component.getCompletedContainers();
-    }
-
-
-    if (containers != null){
-      try {
-        // try to obtain host name from any first available container
-        return ((Map<String,String>)containers.values().toArray()[0]).get("host");
-      } catch (Exception e){
-        if (logger.isDebugEnabled()){
-          logger.warn("Couldn't obtain host name for the component", e);
-        }
-      }
-    }
-    return null;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsConfiguration.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsConfiguration.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsConfiguration.java
deleted file mode 100644
index a02a668..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsConfiguration.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider;
-
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.PropertiesConfiguration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class SliderAppsConfiguration {
-
-	public static final SliderAppsConfiguration INSTANCE = new SliderAppsConfiguration();
-	private static final Logger logger = LoggerFactory
-	    .getLogger(SliderAppsConfiguration.class);
-	private static final String SLIDER_APPS_PROPERTIES_FILE = "/slider.properties";
-	private PropertiesConfiguration propertiesConfig = null;
-
-	private PropertiesConfiguration getConfiguration()
-	    throws ConfigurationException {
-		if (propertiesConfig == null) {
-			propertiesConfig = new PropertiesConfiguration();
-			propertiesConfig.load(getClass().getResourceAsStream(
-			    SLIDER_APPS_PROPERTIES_FILE));
-		}
-		return propertiesConfig;
-	}
-
-	public String getVersion() {
-		try {
-			return getConfiguration().getString("slider.view.version");
-		} catch (ConfigurationException e) {
-			logger.warn("Unable to get version configuration", e);
-		}
-		return null;
-	}
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsResourceProvider.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsResourceProvider.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsResourceProvider.java
deleted file mode 100644
index 1a92130..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsResourceProvider.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider;
-
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.ambari.view.NoSuchResourceException;
-import org.apache.ambari.view.ReadRequest;
-import org.apache.ambari.view.ResourceAlreadyExistsException;
-import org.apache.ambari.view.ResourceProvider;
-import org.apache.ambari.view.SystemException;
-import org.apache.ambari.view.UnsupportedPropertyException;
-import org.apache.hadoop.yarn.exceptions.YarnException;
-
-import com.google.inject.Inject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class SliderAppsResourceProvider implements ResourceProvider<SliderApp> {
-
-	private static final Logger logger = LoggerFactory
-	    .getLogger(SliderAppsResourceProvider.class);
-	@Inject
-	private SliderAppsViewController sliderController;
-
-	@Override
-	public void createResource(String resourceId, Map<String, Object> properties)
-	    throws SystemException, ResourceAlreadyExistsException,
-	    NoSuchResourceException, UnsupportedPropertyException {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	public boolean deleteResource(String resourceId) throws SystemException,
-	    NoSuchResourceException, UnsupportedPropertyException {
-		try {
-			sliderController.deleteSliderApp(resourceId);
-			return true;
-		} catch (YarnException e) {
-			logger.warn("Unable to delete Slider app with id " + resourceId, e);
-			throw new SystemException(e.getMessage(), e);
-		} catch (IOException e) {
-			logger.warn("Unable to delete Slider app with id " + resourceId, e);
-			throw new SystemException(e.getMessage(), e);
-		} catch (InterruptedException e) {
-		    logger.warn("Unable to delete Slider app with id " + resourceId, e);
-            throw new SystemException(e.getMessage(), e);
-        }
-	}
-
-	@Override
-	public SliderApp getResource(String resourceId, Set<String> properties)
-	    throws SystemException, NoSuchResourceException,
-	    UnsupportedPropertyException {
-		try {
-			SliderApp sliderApp = sliderController.getSliderApp(resourceId,
-			    properties);
-			if (sliderApp == null)
-				throw new NoSuchResourceException(resourceId);
-			return sliderApp;
-		} catch (YarnException e) {
-			logger.warn("Unable to determine Slider app with id " + resourceId, e);
-			throw new SystemException(e.getMessage(), e);
-		} catch (IOException e) {
-			logger.warn("Unable to determine Slider app with id " + resourceId, e);
-			throw new SystemException(e.getMessage(), e);
-		} catch (InterruptedException e) {
-		    logger.warn("Unable to determine Slider app with id " + resourceId, e);
-            throw new SystemException(e.getMessage(), e);
-        }
-	}
-
-	@Override
-	public Set<SliderApp> getResources(ReadRequest request)
-	    throws SystemException, NoSuchResourceException,
-	    UnsupportedPropertyException {
-		Set<SliderApp> appSet = new HashSet<SliderApp>();
-		try {
-			List<SliderApp> sliderApps = sliderController.getSliderApps(request
-			    .getPropertyIds());
-			for (SliderApp app : sliderApps)
-				appSet.add(app);
-		} catch (YarnException e) {
-			logger.warn("Unable to determine Slider apps", e);
-			throw new SystemException(e.getMessage(), e);
-		} catch (IOException e) {
-			logger.warn("Unable to determine Slider apps", e);
-			throw new SystemException(e.getMessage(), e);
-		} catch (InterruptedException e) {
-		    logger.warn("Unable to determine Slider apps", e);
-            throw new SystemException(e.getMessage(), e);
-        }
-		return appSet;
-	}
-
-	@Override
-	public boolean updateResource(String resourceId,
-	    Map<String, Object> properties) throws SystemException,
-	    NoSuchResourceException, UnsupportedPropertyException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java
deleted file mode 100644
index a574d2d..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.hadoop.yarn.exceptions.YarnException;
-
-import com.google.gson.JsonObject;
-import com.google.inject.ImplementedBy;
-
-@ImplementedBy(SliderAppsViewControllerImpl.class)
-public interface SliderAppsViewController {
-
-  public static final String PARAM_AMBARI_CLUSTER_API = "ambari.server.url";
-  public static final String PARAM_AMBARI_USERNAME = "ambari.server.username";
-  public static final String PARAM_AMBARI_PASSWORD = "ambari.server.password";
-  public static final String PARAM_SLIDER_USER = "slider.user";
-  public static final String PARAM_VIEW_PRINCIPAL = "view.kerberos.principal";
-  public static final String PARAM_VIEW_PRINCIPAL_KEYTAB= "view.kerberos.principal.keytab";
-
-  public static final String PROPERTY_SLIDER_ZK_QUORUM = "slider.zookeeper.quorum";
-  public static final String PROPERTY_METRICS_SERVER_HOSTNAME = "site.global.metric_collector_host";
-  public static final String PROPERTY_METRICS_SERVER_PORT = "site.global.metric_collector_port";
-  public static final String PROPERTY_METRICS_LIBRARY_PATH = "site.global.metric_collector_lib";
-  public static final String PROPERTY_YARN_RM_WEBAPP_URL = "yarn.rm.webapp.url";
-  public static final String PROPERTY_SLIDER_USER = "view.slider.user";
-  public static final String PROPERTY_JAVA_HOME = "java.home";
-  public static final String PROPERTY_SLIDER_SECURITY_ENABLED = "slider.security.enabled";
-
-  public static final String METRICS_API_NAME = "Metrics API";
-
-  public ViewStatus getViewStatus();
-
-  /**
-   * Provides information about requested Slider App.
-   * 
-   * @param applicationId
-   * @param properties
-   *          Identifies specific properties to show up. Provide
-   *          <code>null</code> for default properties.
-   * @return
-   * @throws YarnException
-   * @throws IOException
-   * @throws InterruptedException 
-   */
-  public SliderApp getSliderApp(String applicationId, Set<String> properties)
-      throws YarnException, IOException, InterruptedException;
-
-  /**
-   * Provides list of Slider apps with requested properties populated.
-   * 
-   * @param properties
-   *          Identifies specific properties to show up. Provide
-   *          <code>null</code> for default properties.
-   * @return
-   * @throws YarnException
-   * @throws IOException
-   * @throws InterruptedException 
-   */
-  public List<SliderApp> getSliderApps(Set<String> properties)
-      throws YarnException, IOException, InterruptedException;
-
-  /**
-   * Attempts to delete a Slider app. An unsuccessful attempt will result in
-   * exception.
-   * 
-   * @param applicationId
-   * @throws YarnException
-   * @throws IOException
-   * @throws InterruptedException 
-   */
-  public void deleteSliderApp(String applicationId) throws YarnException,
-      IOException, InterruptedException;
-
-  public SliderAppType getSliderAppType(String appTypeId, Set<String> properties);
-
-  public List<SliderAppType> getSliderAppTypes(Set<String> properties);
-
-  public String createSliderApp(JsonObject requestJson) throws IOException,
-      YarnException, InterruptedException;
-
-  public void freezeApp(String appId) throws YarnException, IOException,
-      InterruptedException;
-
-  public void thawApp(String appId) throws YarnException, IOException,
-      InterruptedException;
-
-  public void flexApp(String appId, Map<String, Integer> componentsMap)
-      throws YarnException, IOException, InterruptedException;
-
-  public boolean appExists(String string) throws IOException, InterruptedException, YarnException;
-}


[13/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/tv4.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/tv4.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/tv4.js
deleted file mode 100644
index b530ab3..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/tv4.js
+++ /dev/null
@@ -1,1605 +0,0 @@
-/*
- Author: Geraint Luff and others
- Year: 2013
-
- This code is released into the "public domain" by its author(s).  Anybody may use, alter and distribute the code without restriction.  The author makes no guarantees, and takes no liability of any kind for use of this code.
-
- If you find a bug or make an improvement, it would be courteous to let the author know, but it is not compulsory.
- */
-(function (global, factory) {
-  if (typeof define === 'function' && define.amd) {
-    // AMD. Register as an anonymous module.
-    define([], factory);
-  } else if (typeof module !== 'undefined' && module.exports){
-    // CommonJS. Define export.
-    module.exports = factory();
-  } else {
-    // Browser globals
-    global.tv4 = factory();
-  }
-}(this, function () {
-
-// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FObject%2Fkeys
-  if (!Object.keys) {
-    Object.keys = (function () {
-      var hasOwnProperty = Object.prototype.hasOwnProperty,
-        hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
-        dontEnums = [
-          'toString',
-          'toLocaleString',
-          'valueOf',
-          'hasOwnProperty',
-          'isPrototypeOf',
-          'propertyIsEnumerable',
-          'constructor'
-        ],
-        dontEnumsLength = dontEnums.length;
-
-      return function (obj) {
-        if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) {
-          throw new TypeError('Object.keys called on non-object');
-        }
-
-        var result = [];
-
-        for (var prop in obj) {
-          if (hasOwnProperty.call(obj, prop)) {
-            result.push(prop);
-          }
-        }
-
-        if (hasDontEnumBug) {
-          for (var i=0; i < dontEnumsLength; i++) {
-            if (hasOwnProperty.call(obj, dontEnums[i])) {
-              result.push(dontEnums[i]);
-            }
-          }
-        }
-        return result;
-      };
-    })();
-  }
-// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create
-  if (!Object.create) {
-    Object.create = (function(){
-      function F(){}
-
-      return function(o){
-        if (arguments.length !== 1) {
-          throw new Error('Object.create implementation only accepts one parameter.');
-        }
-        F.prototype = o;
-        return new F();
-      };
-    })();
-  }
-// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FArray%2FisArray
-  if(!Array.isArray) {
-    Array.isArray = function (vArg) {
-      return Object.prototype.toString.call(vArg) === "[object Array]";
-    };
-  }
-// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FArray%2FindexOf
-  if (!Array.prototype.indexOf) {
-    Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
-      if (this === null) {
-        throw new TypeError();
-      }
-      var t = Object(this);
-      var len = t.length >>> 0;
-
-      if (len === 0) {
-        return -1;
-      }
-      var n = 0;
-      if (arguments.length > 1) {
-        n = Number(arguments[1]);
-        if (n !== n) { // shortcut for verifying if it's NaN
-          n = 0;
-        } else if (n !== 0 && n !== Infinity && n !== -Infinity) {
-          n = (n > 0 || -1) * Math.floor(Math.abs(n));
-        }
-      }
-      if (n >= len) {
-        return -1;
-      }
-      var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
-      for (; k < len; k++) {
-        if (k in t && t[k] === searchElement) {
-          return k;
-        }
-      }
-      return -1;
-    };
-  }
-
-// Grungey Object.isFrozen hack
-  if (!Object.isFrozen) {
-    Object.isFrozen = function (obj) {
-      var key = "tv4_test_frozen_key";
-      while (obj.hasOwnProperty(key)) {
-        key += Math.random();
-      }
-      try {
-        obj[key] = true;
-        delete obj[key];
-        return false;
-      } catch (e) {
-        return true;
-      }
-    };
-  }
-// Based on: https://github.com/geraintluff/uri-templates, but with all the de-substitution stuff removed
-
-  var uriTemplateGlobalModifiers = {
-    "+": true,
-    "#": true,
-    ".": true,
-    "/": true,
-    ";": true,
-    "?": true,
-    "&": true
-  };
-  var uriTemplateSuffices = {
-    "*": true
-  };
-
-  function notReallyPercentEncode(string) {
-    return encodeURI(string).replace(/%25[0-9][0-9]/g, function (doubleEncoded) {
-      return "%" + doubleEncoded.substring(3);
-    });
-  }
-
-  function uriTemplateSubstitution(spec) {
-    var modifier = "";
-    if (uriTemplateGlobalModifiers[spec.charAt(0)]) {
-      modifier = spec.charAt(0);
-      spec = spec.substring(1);
-    }
-    var separator = "";
-    var prefix = "";
-    var shouldEscape = true;
-    var showVariables = false;
-    var trimEmptyString = false;
-    if (modifier === '+') {
-      shouldEscape = false;
-    } else if (modifier === ".") {
-      prefix = ".";
-      separator = ".";
-    } else if (modifier === "/") {
-      prefix = "/";
-      separator = "/";
-    } else if (modifier === '#') {
-      prefix = "#";
-      shouldEscape = false;
-    } else if (modifier === ';') {
-      prefix = ";";
-      separator = ";";
-      showVariables = true;
-      trimEmptyString = true;
-    } else if (modifier === '?') {
-      prefix = "?";
-      separator = "&";
-      showVariables = true;
-    } else if (modifier === '&') {
-      prefix = "&";
-      separator = "&";
-      showVariables = true;
-    }
-
-    var varNames = [];
-    var varList = spec.split(",");
-    var varSpecs = [];
-    var varSpecMap = {};
-    for (var i = 0; i < varList.length; i++) {
-      var varName = varList[i];
-      var truncate = null;
-      if (varName.indexOf(":") !== -1) {
-        var parts = varName.split(":");
-        varName = parts[0];
-        truncate = parseInt(parts[1], 10);
-      }
-      var suffices = {};
-      while (uriTemplateSuffices[varName.charAt(varName.length - 1)]) {
-        suffices[varName.charAt(varName.length - 1)] = true;
-        varName = varName.substring(0, varName.length - 1);
-      }
-      var varSpec = {
-        truncate: truncate,
-        name: varName,
-        suffices: suffices
-      };
-      varSpecs.push(varSpec);
-      varSpecMap[varName] = varSpec;
-      varNames.push(varName);
-    }
-    var subFunction = function (valueFunction) {
-      var result = "";
-      var startIndex = 0;
-      for (var i = 0; i < varSpecs.length; i++) {
-        var varSpec = varSpecs[i];
-        var value = valueFunction(varSpec.name);
-        if (value === null || value === undefined || (Array.isArray(value) && value.length === 0) || (typeof value === 'object' && Object.keys(value).length === 0)) {
-          startIndex++;
-          continue;
-        }
-        if (i === startIndex) {
-          result += prefix;
-        } else {
-          result += (separator || ",");
-        }
-        if (Array.isArray(value)) {
-          if (showVariables) {
-            result += varSpec.name + "=";
-          }
-          for (var j = 0; j < value.length; j++) {
-            if (j > 0) {
-              result += varSpec.suffices['*'] ? (separator || ",") : ",";
-              if (varSpec.suffices['*'] && showVariables) {
-                result += varSpec.name + "=";
-              }
-            }
-            result += shouldEscape ? encodeURIComponent(value[j]).replace(/!/g, "%21") : notReallyPercentEncode(value[j]);
-          }
-        } else if (typeof value === "object") {
-          if (showVariables && !varSpec.suffices['*']) {
-            result += varSpec.name + "=";
-          }
-          var first = true;
-          for (var key in value) {
-            if (!first) {
-              result += varSpec.suffices['*'] ? (separator || ",") : ",";
-            }
-            first = false;
-            result += shouldEscape ? encodeURIComponent(key).replace(/!/g, "%21") : notReallyPercentEncode(key);
-            result += varSpec.suffices['*'] ? '=' : ",";
-            result += shouldEscape ? encodeURIComponent(value[key]).replace(/!/g, "%21") : notReallyPercentEncode(value[key]);
-          }
-        } else {
-          if (showVariables) {
-            result += varSpec.name;
-            if (!trimEmptyString || value !== "") {
-              result += "=";
-            }
-          }
-          if (varSpec.truncate != null) {
-            value = value.substring(0, varSpec.truncate);
-          }
-          result += shouldEscape ? encodeURIComponent(value).replace(/!/g, "%21"): notReallyPercentEncode(value);
-        }
-      }
-      return result;
-    };
-    subFunction.varNames = varNames;
-    return {
-      prefix: prefix,
-      substitution: subFunction
-    };
-  }
-
-  function UriTemplate(template) {
-    if (!(this instanceof UriTemplate)) {
-      return new UriTemplate(template);
-    }
-    var parts = template.split("{");
-    var textParts = [parts.shift()];
-    var prefixes = [];
-    var substitutions = [];
-    var varNames = [];
-    while (parts.length > 0) {
-      var part = parts.shift();
-      var spec = part.split("}")[0];
-      var remainder = part.substring(spec.length + 1);
-      var funcs = uriTemplateSubstitution(spec);
-      substitutions.push(funcs.substitution);
-      prefixes.push(funcs.prefix);
-      textParts.push(remainder);
-      varNames = varNames.concat(funcs.substitution.varNames);
-    }
-    this.fill = function (valueFunction) {
-      var result = textParts[0];
-      for (var i = 0; i < substitutions.length; i++) {
-        var substitution = substitutions[i];
-        result += substitution(valueFunction);
-        result += textParts[i + 1];
-      }
-      return result;
-    };
-    this.varNames = varNames;
-    this.template = template;
-  }
-  UriTemplate.prototype = {
-    toString: function () {
-      return this.template;
-    },
-    fillFromObject: function (obj) {
-      return this.fill(function (varName) {
-        return obj[varName];
-      });
-    }
-  };
-  var ValidatorContext = function ValidatorContext(parent, collectMultiple, errorMessages, checkRecursive, trackUnknownProperties) {
-    this.missing = [];
-    this.missingMap = {};
-    this.formatValidators = parent ? Object.create(parent.formatValidators) : {};
-    this.schemas = parent ? Object.create(parent.schemas) : {};
-    this.collectMultiple = collectMultiple;
-    this.errors = [];
-    this.handleError = collectMultiple ? this.collectError : this.returnError;
-    if (checkRecursive) {
-      this.checkRecursive = true;
-      this.scanned = [];
-      this.scannedFrozen = [];
-      this.scannedFrozenSchemas = [];
-      this.scannedFrozenValidationErrors = [];
-      this.validatedSchemasKey = 'tv4_validation_id';
-      this.validationErrorsKey = 'tv4_validation_errors_id';
-    }
-    if (trackUnknownProperties) {
-      this.trackUnknownProperties = true;
-      this.knownPropertyPaths = {};
-      this.unknownPropertyPaths = {};
-    }
-    this.errorMessages = errorMessages;
-    this.definedKeywords = {};
-    if (parent) {
-      for (var key in parent.definedKeywords) {
-        this.definedKeywords[key] = parent.definedKeywords[key].slice(0);
-      }
-    }
-  };
-  ValidatorContext.prototype.defineKeyword = function (keyword, keywordFunction) {
-    this.definedKeywords[keyword] = this.definedKeywords[keyword] || [];
-    this.definedKeywords[keyword].push(keywordFunction);
-  };
-  ValidatorContext.prototype.createError = function (code, messageParams, dataPath, schemaPath, subErrors) {
-    var messageTemplate = this.errorMessages[code] || ErrorMessagesDefault[code];
-    if (typeof messageTemplate !== 'string') {
-      return new ValidationError(code, "Unknown error code " + code + ": " + JSON.stringify(messageParams), messageParams, dataPath, schemaPath, subErrors);
-    }
-    // Adapted from Crockford's supplant()
-    var message = messageTemplate.replace(/\{([^{}]*)\}/g, function (whole, varName) {
-      var subValue = messageParams[varName];
-      return typeof subValue === 'string' || typeof subValue === 'number' ? subValue : whole;
-    });
-    return new ValidationError(code, message, messageParams, dataPath, schemaPath, subErrors);
-  };
-  ValidatorContext.prototype.returnError = function (error) {
-    return error;
-  };
-  ValidatorContext.prototype.collectError = function (error) {
-    if (error) {
-      this.errors.push(error);
-    }
-    return null;
-  };
-  ValidatorContext.prototype.prefixErrors = function (startIndex, dataPath, schemaPath) {
-    for (var i = startIndex; i < this.errors.length; i++) {
-      this.errors[i] = this.errors[i].prefixWith(dataPath, schemaPath);
-    }
-    return this;
-  };
-  ValidatorContext.prototype.banUnknownProperties = function () {
-    for (var unknownPath in this.unknownPropertyPaths) {
-      var error = this.createError(ErrorCodes.UNKNOWN_PROPERTY, {path: unknownPath}, unknownPath, "");
-      var result = this.handleError(error);
-      if (result) {
-        return result;
-      }
-    }
-    return null;
-  };
-
-  ValidatorContext.prototype.addFormat = function (format, validator) {
-    if (typeof format === 'object') {
-      for (var key in format) {
-        this.addFormat(key, format[key]);
-      }
-      return this;
-    }
-    this.formatValidators[format] = validator;
-  };
-  ValidatorContext.prototype.resolveRefs = function (schema, urlHistory) {
-    if (schema['$ref'] !== undefined) {
-      urlHistory = urlHistory || {};
-      if (urlHistory[schema['$ref']]) {
-        return this.createError(ErrorCodes.CIRCULAR_REFERENCE, {urls: Object.keys(urlHistory).join(', ')}, '', '');
-      }
-      urlHistory[schema['$ref']] = true;
-      schema = this.getSchema(schema['$ref'], urlHistory);
-    }
-    return schema;
-  };
-  ValidatorContext.prototype.getSchema = function (url, urlHistory) {
-    var schema;
-    if (this.schemas[url] !== undefined) {
-      schema = this.schemas[url];
-      return this.resolveRefs(schema, urlHistory);
-    }
-    var baseUrl = url;
-    var fragment = "";
-    if (url.indexOf('#') !== -1) {
-      fragment = url.substring(url.indexOf("#") + 1);
-      baseUrl = url.substring(0, url.indexOf("#"));
-    }
-    if (typeof this.schemas[baseUrl] === 'object') {
-      schema = this.schemas[baseUrl];
-      var pointerPath = decodeURIComponent(fragment);
-      if (pointerPath === "") {
-        return this.resolveRefs(schema, urlHistory);
-      } else if (pointerPath.charAt(0) !== "/") {
-        return undefined;
-      }
-      var parts = pointerPath.split("/").slice(1);
-      for (var i = 0; i < parts.length; i++) {
-        var component = parts[i].replace(/~1/g, "/").replace(/~0/g, "~");
-        if (schema[component] === undefined) {
-          schema = undefined;
-          break;
-        }
-        schema = schema[component];
-      }
-      if (schema !== undefined) {
-        return this.resolveRefs(schema, urlHistory);
-      }
-    }
-    if (this.missing[baseUrl] === undefined) {
-      this.missing.push(baseUrl);
-      this.missing[baseUrl] = baseUrl;
-      this.missingMap[baseUrl] = baseUrl;
-    }
-  };
-  ValidatorContext.prototype.searchSchemas = function (schema, url) {
-    if (schema && typeof schema === "object") {
-      if (typeof schema.id === "string") {
-        if (isTrustedUrl(url, schema.id)) {
-          if (this.schemas[schema.id] === undefined) {
-            this.schemas[schema.id] = schema;
-          }
-        }
-      }
-      for (var key in schema) {
-        if (key !== "enum") {
-          if (typeof schema[key] === "object") {
-            this.searchSchemas(schema[key], url);
-          } else if (key === "$ref") {
-            var uri = getDocumentUri(schema[key]);
-            if (uri && this.schemas[uri] === undefined && this.missingMap[uri] === undefined) {
-              this.missingMap[uri] = uri;
-            }
-          }
-        }
-      }
-    }
-  };
-  ValidatorContext.prototype.addSchema = function (url, schema) {
-    //overload
-    if (typeof url !== 'string' || typeof schema === 'undefined') {
-      if (typeof url === 'object' && typeof url.id === 'string') {
-        schema = url;
-        url = schema.id;
-      }
-      else {
-        return;
-      }
-    }
-    if (url === getDocumentUri(url) + "#") {
-      // Remove empty fragment
-      url = getDocumentUri(url);
-    }
-    this.schemas[url] = schema;
-    delete this.missingMap[url];
-    normSchema(schema, url);
-    this.searchSchemas(schema, url);
-  };
-
-  ValidatorContext.prototype.getSchemaMap = function () {
-    var map = {};
-    for (var key in this.schemas) {
-      map[key] = this.schemas[key];
-    }
-    return map;
-  };
-
-  ValidatorContext.prototype.getSchemaUris = function (filterRegExp) {
-    var list = [];
-    for (var key in this.schemas) {
-      if (!filterRegExp || filterRegExp.test(key)) {
-        list.push(key);
-      }
-    }
-    return list;
-  };
-
-  ValidatorContext.prototype.getMissingUris = function (filterRegExp) {
-    var list = [];
-    for (var key in this.missingMap) {
-      if (!filterRegExp || filterRegExp.test(key)) {
-        list.push(key);
-      }
-    }
-    return list;
-  };
-
-  ValidatorContext.prototype.dropSchemas = function () {
-    this.schemas = {};
-    this.reset();
-  };
-  ValidatorContext.prototype.reset = function () {
-    this.missing = [];
-    this.missingMap = {};
-    this.errors = [];
-  };
-
-  ValidatorContext.prototype.validateAll = function (data, schema, dataPathParts, schemaPathParts, dataPointerPath) {
-    var topLevel;
-    schema = this.resolveRefs(schema);
-    if (!schema) {
-      return null;
-    } else if (schema instanceof ValidationError) {
-      this.errors.push(schema);
-      return schema;
-    }
-
-    var startErrorCount = this.errors.length;
-    var frozenIndex, scannedFrozenSchemaIndex = null, scannedSchemasIndex = null;
-    if (this.checkRecursive && data && typeof data === 'object') {
-      topLevel = !this.scanned.length;
-      if (data[this.validatedSchemasKey]) {
-        var schemaIndex = data[this.validatedSchemasKey].indexOf(schema);
-        if (schemaIndex !== -1) {
-          this.errors = this.errors.concat(data[this.validationErrorsKey][schemaIndex]);
-          return null;
-        }
-      }
-      if (Object.isFrozen(data)) {
-        frozenIndex = this.scannedFrozen.indexOf(data);
-        if (frozenIndex !== -1) {
-          var frozenSchemaIndex = this.scannedFrozenSchemas[frozenIndex].indexOf(schema);
-          if (frozenSchemaIndex !== -1) {
-            this.errors = this.errors.concat(this.scannedFrozenValidationErrors[frozenIndex][frozenSchemaIndex]);
-            return null;
-          }
-        }
-      }
-      this.scanned.push(data);
-      if (Object.isFrozen(data)) {
-        if (frozenIndex === -1) {
-          frozenIndex = this.scannedFrozen.length;
-          this.scannedFrozen.push(data);
-          this.scannedFrozenSchemas.push([]);
-        }
-        scannedFrozenSchemaIndex = this.scannedFrozenSchemas[frozenIndex].length;
-        this.scannedFrozenSchemas[frozenIndex][scannedFrozenSchemaIndex] = schema;
-        this.scannedFrozenValidationErrors[frozenIndex][scannedFrozenSchemaIndex] = [];
-      } else {
-        if (!data[this.validatedSchemasKey]) {
-          try {
-            Object.defineProperty(data, this.validatedSchemasKey, {
-              value: [],
-              configurable: true
-            });
-            Object.defineProperty(data, this.validationErrorsKey, {
-              value: [],
-              configurable: true
-            });
-          } catch (e) {
-            //IE 7/8 workaround
-            data[this.validatedSchemasKey] = [];
-            data[this.validationErrorsKey] = [];
-          }
-        }
-        scannedSchemasIndex = data[this.validatedSchemasKey].length;
-        data[this.validatedSchemasKey][scannedSchemasIndex] = schema;
-        data[this.validationErrorsKey][scannedSchemasIndex] = [];
-      }
-    }
-
-    var errorCount = this.errors.length;
-    var error = this.validateBasic(data, schema, dataPointerPath)
-      || this.validateNumeric(data, schema, dataPointerPath)
-      || this.validateString(data, schema, dataPointerPath)
-      || this.validateArray(data, schema, dataPointerPath)
-      || this.validateObject(data, schema, dataPointerPath)
-      || this.validateCombinations(data, schema, dataPointerPath)
-      || this.validateHypermedia(data, schema, dataPointerPath)
-      || this.validateFormat(data, schema, dataPointerPath)
-      || this.validateDefinedKeywords(data, schema, dataPointerPath)
-      || null;
-
-    if (topLevel) {
-      while (this.scanned.length) {
-        var item = this.scanned.pop();
-        delete item[this.validatedSchemasKey];
-      }
-      this.scannedFrozen = [];
-      this.scannedFrozenSchemas = [];
-    }
-
-    if (error || errorCount !== this.errors.length) {
-      while ((dataPathParts && dataPathParts.length) || (schemaPathParts && schemaPathParts.length)) {
-        var dataPart = (dataPathParts && dataPathParts.length) ? "" + dataPathParts.pop() : null;
-        var schemaPart = (schemaPathParts && schemaPathParts.length) ? "" + schemaPathParts.pop() : null;
-        if (error) {
-          error = error.prefixWith(dataPart, schemaPart);
-        }
-        this.prefixErrors(errorCount, dataPart, schemaPart);
-      }
-    }
-
-    if (scannedFrozenSchemaIndex !== null) {
-      this.scannedFrozenValidationErrors[frozenIndex][scannedFrozenSchemaIndex] = this.errors.slice(startErrorCount);
-    } else if (scannedSchemasIndex !== null) {
-      data[this.validationErrorsKey][scannedSchemasIndex] = this.errors.slice(startErrorCount);
-    }
-
-    return this.handleError(error);
-  };
-  ValidatorContext.prototype.validateFormat = function (data, schema) {
-    if (typeof schema.format !== 'string' || !this.formatValidators[schema.format]) {
-      return null;
-    }
-    var errorMessage = this.formatValidators[schema.format].call(null, data, schema);
-    if (typeof errorMessage === 'string' || typeof errorMessage === 'number') {
-      return this.createError(ErrorCodes.FORMAT_CUSTOM, {message: errorMessage}).prefixWith(null, "format");
-    } else if (errorMessage && typeof errorMessage === 'object') {
-      return this.createError(ErrorCodes.FORMAT_CUSTOM, {message: errorMessage.message || "?"}, errorMessage.dataPath || null, errorMessage.schemaPath || "/format");
-    }
-    return null;
-  };
-  ValidatorContext.prototype.validateDefinedKeywords = function (data, schema) {
-    for (var key in this.definedKeywords) {
-      if (typeof schema[key] === 'undefined') {
-        continue;
-      }
-      var validationFunctions = this.definedKeywords[key];
-      for (var i = 0; i < validationFunctions.length; i++) {
-        var func = validationFunctions[i];
-        var result = func(data, schema[key], schema);
-        if (typeof result === 'string' || typeof result === 'number') {
-          return this.createError(ErrorCodes.KEYWORD_CUSTOM, {key: key, message: result}).prefixWith(null, "format");
-        } else if (result && typeof result === 'object') {
-          var code = result.code || ErrorCodes.KEYWORD_CUSTOM;
-          if (typeof code === 'string') {
-            if (!ErrorCodes[code]) {
-              throw new Error('Undefined error code (use defineError): ' + code);
-            }
-            code = ErrorCodes[code];
-          }
-          var messageParams = (typeof result.message === 'object') ? result.message : {key: key, message: result.message || "?"};
-          var schemaPath = result.schemaPath ||( "/" + key.replace(/~/g, '~0').replace(/\//g, '~1'));
-          return this.createError(code, messageParams, result.dataPath || null, schemaPath);
-        }
-      }
-    }
-    return null;
-  };
-
-  function recursiveCompare(A, B) {
-    if (A === B) {
-      return true;
-    }
-    if (typeof A === "object" && typeof B === "object") {
-      if (Array.isArray(A) !== Array.isArray(B)) {
-        return false;
-      } else if (Array.isArray(A)) {
-        if (A.length !== B.length) {
-          return false;
-        }
-        for (var i = 0; i < A.length; i++) {
-          if (!recursiveCompare(A[i], B[i])) {
-            return false;
-          }
-        }
-      } else {
-        var key;
-        for (key in A) {
-          if (B[key] === undefined && A[key] !== undefined) {
-            return false;
-          }
-        }
-        for (key in B) {
-          if (A[key] === undefined && B[key] !== undefined) {
-            return false;
-          }
-        }
-        for (key in A) {
-          if (!recursiveCompare(A[key], B[key])) {
-            return false;
-          }
-        }
-      }
-      return true;
-    }
-    return false;
-  }
-
-  ValidatorContext.prototype.validateBasic = function validateBasic(data, schema, dataPointerPath) {
-    var error;
-    if (error = this.validateType(data, schema, dataPointerPath)) {
-      return error.prefixWith(null, "type");
-    }
-    if (error = this.validateEnum(data, schema, dataPointerPath)) {
-      return error.prefixWith(null, "type");
-    }
-    return null;
-  };
-
-  ValidatorContext.prototype.validateType = function validateType(data, schema) {
-    if (schema.type === undefined) {
-      return null;
-    }
-    var dataType = typeof data;
-    if (data === null) {
-      dataType = "null";
-    } else if (Array.isArray(data)) {
-      dataType = "array";
-    }
-    var allowedTypes = schema.type;
-    if (typeof allowedTypes !== "object") {
-      allowedTypes = [allowedTypes];
-    }
-
-    for (var i = 0; i < allowedTypes.length; i++) {
-      var type = allowedTypes[i];
-      if (type === dataType || (type === "integer" && dataType === "number" && (data % 1 === 0))) {
-        return null;
-      }
-    }
-    return this.createError(ErrorCodes.INVALID_TYPE, {type: dataType, expected: allowedTypes.join("/")});
-  };
-
-  ValidatorContext.prototype.validateEnum = function validateEnum(data, schema) {
-    if (schema["enum"] === undefined) {
-      return null;
-    }
-    for (var i = 0; i < schema["enum"].length; i++) {
-      var enumVal = schema["enum"][i];
-      if (recursiveCompare(data, enumVal)) {
-        return null;
-      }
-    }
-    return this.createError(ErrorCodes.ENUM_MISMATCH, {value: (typeof JSON !== 'undefined') ? JSON.stringify(data) : data});
-  };
-
-  ValidatorContext.prototype.validateNumeric = function validateNumeric(data, schema, dataPointerPath) {
-    return this.validateMultipleOf(data, schema, dataPointerPath)
-      || this.validateMinMax(data, schema, dataPointerPath)
-      || null;
-  };
-
-  ValidatorContext.prototype.validateMultipleOf = function validateMultipleOf(data, schema) {
-    var multipleOf = schema.multipleOf || schema.divisibleBy;
-    if (multipleOf === undefined) {
-      return null;
-    }
-    if (typeof data === "number") {
-      if (data % multipleOf !== 0) {
-        return this.createError(ErrorCodes.NUMBER_MULTIPLE_OF, {value: data, multipleOf: multipleOf});
-      }
-    }
-    return null;
-  };
-
-  ValidatorContext.prototype.validateMinMax = function validateMinMax(data, schema) {
-    if (typeof data !== "number") {
-      return null;
-    }
-    if (schema.minimum !== undefined) {
-      if (data < schema.minimum) {
-        return this.createError(ErrorCodes.NUMBER_MINIMUM, {value: data, minimum: schema.minimum}).prefixWith(null, "minimum");
-      }
-      if (schema.exclusiveMinimum && data === schema.minimum) {
-        return this.createError(ErrorCodes.NUMBER_MINIMUM_EXCLUSIVE, {value: data, minimum: schema.minimum}).prefixWith(null, "exclusiveMinimum");
-      }
-    }
-    if (schema.maximum !== undefined) {
-      if (data > schema.maximum) {
-        return this.createError(ErrorCodes.NUMBER_MAXIMUM, {value: data, maximum: schema.maximum}).prefixWith(null, "maximum");
-      }
-      if (schema.exclusiveMaximum && data === schema.maximum) {
-        return this.createError(ErrorCodes.NUMBER_MAXIMUM_EXCLUSIVE, {value: data, maximum: schema.maximum}).prefixWith(null, "exclusiveMaximum");
-      }
-    }
-    return null;
-  };
-
-  ValidatorContext.prototype.validateString = function validateString(data, schema, dataPointerPath) {
-    return this.validateStringLength(data, schema, dataPointerPath)
-      || this.validateStringPattern(data, schema, dataPointerPath)
-      || null;
-  };
-
-  ValidatorContext.prototype.validateStringLength = function validateStringLength(data, schema) {
-    if (typeof data !== "string") {
-      return null;
-    }
-    if (schema.minLength !== undefined) {
-      if (data.length < schema.minLength) {
-        return this.createError(ErrorCodes.STRING_LENGTH_SHORT, {length: data.length, minimum: schema.minLength}).prefixWith(null, "minLength");
-      }
-    }
-    if (schema.maxLength !== undefined) {
-      if (data.length > schema.maxLength) {
-        return this.createError(ErrorCodes.STRING_LENGTH_LONG, {length: data.length, maximum: schema.maxLength}).prefixWith(null, "maxLength");
-      }
-    }
-    return null;
-  };
-
-  ValidatorContext.prototype.validateStringPattern = function validateStringPattern(data, schema) {
-    if (typeof data !== "string" || schema.pattern === undefined) {
-      return null;
-    }
-    var regexp = new RegExp(schema.pattern);
-    if (!regexp.test(data)) {
-      return this.createError(ErrorCodes.STRING_PATTERN, {pattern: schema.pattern}).prefixWith(null, "pattern");
-    }
-    return null;
-  };
-  ValidatorContext.prototype.validateArray = function validateArray(data, schema, dataPointerPath) {
-    if (!Array.isArray(data)) {
-      return null;
-    }
-    return this.validateArrayLength(data, schema, dataPointerPath)
-      || this.validateArrayUniqueItems(data, schema, dataPointerPath)
-      || this.validateArrayItems(data, schema, dataPointerPath)
-      || null;
-  };
-
-  ValidatorContext.prototype.validateArrayLength = function validateArrayLength(data, schema) {
-    var error;
-    if (schema.minItems !== undefined) {
-      if (data.length < schema.minItems) {
-        error = (this.createError(ErrorCodes.ARRAY_LENGTH_SHORT, {length: data.length, minimum: schema.minItems})).prefixWith(null, "minItems");
-        if (this.handleError(error)) {
-          return error;
-        }
-      }
-    }
-    if (schema.maxItems !== undefined) {
-      if (data.length > schema.maxItems) {
-        error = (this.createError(ErrorCodes.ARRAY_LENGTH_LONG, {length: data.length, maximum: schema.maxItems})).prefixWith(null, "maxItems");
-        if (this.handleError(error)) {
-          return error;
-        }
-      }
-    }
-    return null;
-  };
-
-  ValidatorContext.prototype.validateArrayUniqueItems = function validateArrayUniqueItems(data, schema) {
-    if (schema.uniqueItems) {
-      for (var i = 0; i < data.length; i++) {
-        for (var j = i + 1; j < data.length; j++) {
-          if (recursiveCompare(data[i], data[j])) {
-            var error = (this.createError(ErrorCodes.ARRAY_UNIQUE, {match1: i, match2: j})).prefixWith(null, "uniqueItems");
-            if (this.handleError(error)) {
-              return error;
-            }
-          }
-        }
-      }
-    }
-    return null;
-  };
-
-  ValidatorContext.prototype.validateArrayItems = function validateArrayItems(data, schema, dataPointerPath) {
-    if (schema.items === undefined) {
-      return null;
-    }
-    var error, i;
-    if (Array.isArray(schema.items)) {
-      for (i = 0; i < data.length; i++) {
-        if (i < schema.items.length) {
-          if (error = this.validateAll(data[i], schema.items[i], [i], ["items", i], dataPointerPath + "/" + i)) {
-            return error;
-          }
-        } else if (schema.additionalItems !== undefined) {
-          if (typeof schema.additionalItems === "boolean") {
-            if (!schema.additionalItems) {
-              error = (this.createError(ErrorCodes.ARRAY_ADDITIONAL_ITEMS, {})).prefixWith("" + i, "additionalItems");
-              if (this.handleError(error)) {
-                return error;
-              }
-            }
-          } else if (error = this.validateAll(data[i], schema.additionalItems, [i], ["additionalItems"], dataPointerPath + "/" + i)) {
-            return error;
-          }
-        }
-      }
-    } else {
-      for (i = 0; i < data.length; i++) {
-        if (error = this.validateAll(data[i], schema.items, [i], ["items"], dataPointerPath + "/" + i)) {
-          return error;
-        }
-      }
-    }
-    return null;
-  };
-
-  ValidatorContext.prototype.validateObject = function validateObject(data, schema, dataPointerPath) {
-    if (typeof data !== "object" || data === null || Array.isArray(data)) {
-      return null;
-    }
-    return this.validateObjectMinMaxProperties(data, schema, dataPointerPath)
-      || this.validateObjectRequiredProperties(data, schema, dataPointerPath)
-      || this.validateObjectProperties(data, schema, dataPointerPath)
-      || this.validateObjectDependencies(data, schema, dataPointerPath)
-      || null;
-  };
-
-  ValidatorContext.prototype.validateObjectMinMaxProperties = function validateObjectMinMaxProperties(data, schema) {
-    var keys = Object.keys(data);
-    var error;
-    if (schema.minProperties !== undefined) {
-      if (keys.length < schema.minProperties) {
-        error = this.createError(ErrorCodes.OBJECT_PROPERTIES_MINIMUM, {propertyCount: keys.length, minimum: schema.minProperties}).prefixWith(null, "minProperties");
-        if (this.handleError(error)) {
-          return error;
-        }
-      }
-    }
-    if (schema.maxProperties !== undefined) {
-      if (keys.length > schema.maxProperties) {
-        error = this.createError(ErrorCodes.OBJECT_PROPERTIES_MAXIMUM, {propertyCount: keys.length, maximum: schema.maxProperties}).prefixWith(null, "maxProperties");
-        if (this.handleError(error)) {
-          return error;
-        }
-      }
-    }
-    return null;
-  };
-
-  ValidatorContext.prototype.validateObjectRequiredProperties = function validateObjectRequiredProperties(data, schema) {
-    if (schema.required !== undefined) {
-      for (var i = 0; i < schema.required.length; i++) {
-        var key = schema.required[i];
-        if (data[key] === undefined) {
-          var error = this.createError(ErrorCodes.OBJECT_REQUIRED, {key: key}).prefixWith(null, "" + i).prefixWith(null, "required");
-          if (this.handleError(error)) {
-            return error;
-          }
-        }
-      }
-    }
-    return null;
-  };
-
-  ValidatorContext.prototype.validateObjectProperties = function validateObjectProperties(data, schema, dataPointerPath) {
-    var error;
-    for (var key in data) {
-      var keyPointerPath = dataPointerPath + "/" + key.replace(/~/g, '~0').replace(/\//g, '~1');
-      var foundMatch = false;
-      if (schema.properties !== undefined && schema.properties[key] !== undefined) {
-        foundMatch = true;
-        if (error = this.validateAll(data[key], schema.properties[key], [key], ["properties", key], keyPointerPath)) {
-          return error;
-        }
-      }
-      if (schema.patternProperties !== undefined) {
-        for (var patternKey in schema.patternProperties) {
-          var regexp = new RegExp(patternKey);
-          if (regexp.test(key)) {
-            foundMatch = true;
-            if (error = this.validateAll(data[key], schema.patternProperties[patternKey], [key], ["patternProperties", patternKey], keyPointerPath)) {
-              return error;
-            }
-          }
-        }
-      }
-      if (!foundMatch) {
-        if (schema.additionalProperties !== undefined) {
-          if (this.trackUnknownProperties) {
-            this.knownPropertyPaths[keyPointerPath] = true;
-            delete this.unknownPropertyPaths[keyPointerPath];
-          }
-          if (typeof schema.additionalProperties === "boolean") {
-            if (!schema.additionalProperties) {
-              error = this.createError(ErrorCodes.OBJECT_ADDITIONAL_PROPERTIES, {}).prefixWith(key, "additionalProperties");
-              if (this.handleError(error)) {
-                return error;
-              }
-            }
-          } else {
-            if (error = this.validateAll(data[key], schema.additionalProperties, [key], ["additionalProperties"], keyPointerPath)) {
-              return error;
-            }
-          }
-        } else if (this.trackUnknownProperties && !this.knownPropertyPaths[keyPointerPath]) {
-          this.unknownPropertyPaths[keyPointerPath] = true;
-        }
-      } else if (this.trackUnknownProperties) {
-        this.knownPropertyPaths[keyPointerPath] = true;
-        delete this.unknownPropertyPaths[keyPointerPath];
-      }
-    }
-    return null;
-  };
-
-  ValidatorContext.prototype.validateObjectDependencies = function validateObjectDependencies(data, schema, dataPointerPath) {
-    var error;
-    if (schema.dependencies !== undefined) {
-      for (var depKey in schema.dependencies) {
-        if (data[depKey] !== undefined) {
-          var dep = schema.dependencies[depKey];
-          if (typeof dep === "string") {
-            if (data[dep] === undefined) {
-              error = this.createError(ErrorCodes.OBJECT_DEPENDENCY_KEY, {key: depKey, missing: dep}).prefixWith(null, depKey).prefixWith(null, "dependencies");
-              if (this.handleError(error)) {
-                return error;
-              }
-            }
-          } else if (Array.isArray(dep)) {
-            for (var i = 0; i < dep.length; i++) {
-              var requiredKey = dep[i];
-              if (data[requiredKey] === undefined) {
-                error = this.createError(ErrorCodes.OBJECT_DEPENDENCY_KEY, {key: depKey, missing: requiredKey}).prefixWith(null, "" + i).prefixWith(null, depKey).prefixWith(null, "dependencies");
-                if (this.handleError(error)) {
-                  return error;
-                }
-              }
-            }
-          } else {
-            if (error = this.validateAll(data, dep, [], ["dependencies", depKey], dataPointerPath)) {
-              return error;
-            }
-          }
-        }
-      }
-    }
-    return null;
-  };
-
-  ValidatorContext.prototype.validateCombinations = function validateCombinations(data, schema, dataPointerPath) {
-    return this.validateAllOf(data, schema, dataPointerPath)
-      || this.validateAnyOf(data, schema, dataPointerPath)
-      || this.validateOneOf(data, schema, dataPointerPath)
-      || this.validateNot(data, schema, dataPointerPath)
-      || null;
-  };
-
-  ValidatorContext.prototype.validateAllOf = function validateAllOf(data, schema, dataPointerPath) {
-    if (schema.allOf === undefined) {
-      return null;
-    }
-    var error;
-    for (var i = 0; i < schema.allOf.length; i++) {
-      var subSchema = schema.allOf[i];
-      if (error = this.validateAll(data, subSchema, [], ["allOf", i], dataPointerPath)) {
-        return error;
-      }
-    }
-    return null;
-  };
-
-  ValidatorContext.prototype.validateAnyOf = function validateAnyOf(data, schema, dataPointerPath) {
-    if (schema.anyOf === undefined) {
-      return null;
-    }
-    var errors = [];
-    var startErrorCount = this.errors.length;
-    var oldUnknownPropertyPaths, oldKnownPropertyPaths;
-    if (this.trackUnknownProperties) {
-      oldUnknownPropertyPaths = this.unknownPropertyPaths;
-      oldKnownPropertyPaths = this.knownPropertyPaths;
-    }
-    var errorAtEnd = true;
-    for (var i = 0; i < schema.anyOf.length; i++) {
-      if (this.trackUnknownProperties) {
-        this.unknownPropertyPaths = {};
-        this.knownPropertyPaths = {};
-      }
-      var subSchema = schema.anyOf[i];
-
-      var errorCount = this.errors.length;
-      var error = this.validateAll(data, subSchema, [], ["anyOf", i], dataPointerPath);
-
-      if (error === null && errorCount === this.errors.length) {
-        this.errors = this.errors.slice(0, startErrorCount);
-
-        if (this.trackUnknownProperties) {
-          for (var knownKey in this.knownPropertyPaths) {
-            oldKnownPropertyPaths[knownKey] = true;
-            delete oldUnknownPropertyPaths[knownKey];
-          }
-          for (var unknownKey in this.unknownPropertyPaths) {
-            if (!oldKnownPropertyPaths[unknownKey]) {
-              oldUnknownPropertyPaths[unknownKey] = true;
-            }
-          }
-          // We need to continue looping so we catch all the property definitions, but we don't want to return an error
-          errorAtEnd = false;
-          continue;
-        }
-
-        return null;
-      }
-      if (error) {
-        errors.push(error.prefixWith(null, "" + i).prefixWith(null, "anyOf"));
-      }
-    }
-    if (this.trackUnknownProperties) {
-      this.unknownPropertyPaths = oldUnknownPropertyPaths;
-      this.knownPropertyPaths = oldKnownPropertyPaths;
-    }
-    if (errorAtEnd) {
-      errors = errors.concat(this.errors.slice(startErrorCount));
-      this.errors = this.errors.slice(0, startErrorCount);
-      return this.createError(ErrorCodes.ANY_OF_MISSING, {}, "", "/anyOf", errors);
-    }
-  };
-
-  ValidatorContext.prototype.validateOneOf = function validateOneOf(data, schema, dataPointerPath) {
-    if (schema.oneOf === undefined) {
-      return null;
-    }
-    var validIndex = null;
-    var errors = [];
-    var startErrorCount = this.errors.length;
-    var oldUnknownPropertyPaths, oldKnownPropertyPaths;
-    if (this.trackUnknownProperties) {
-      oldUnknownPropertyPaths = this.unknownPropertyPaths;
-      oldKnownPropertyPaths = this.knownPropertyPaths;
-    }
-    for (var i = 0; i < schema.oneOf.length; i++) {
-      if (this.trackUnknownProperties) {
-        this.unknownPropertyPaths = {};
-        this.knownPropertyPaths = {};
-      }
-      var subSchema = schema.oneOf[i];
-
-      var errorCount = this.errors.length;
-      var error = this.validateAll(data, subSchema, [], ["oneOf", i], dataPointerPath);
-
-      if (error === null && errorCount === this.errors.length) {
-        if (validIndex === null) {
-          validIndex = i;
-        } else {
-          this.errors = this.errors.slice(0, startErrorCount);
-          return this.createError(ErrorCodes.ONE_OF_MULTIPLE, {index1: validIndex, index2: i}, "", "/oneOf");
-        }
-        if (this.trackUnknownProperties) {
-          for (var knownKey in this.knownPropertyPaths) {
-            oldKnownPropertyPaths[knownKey] = true;
-            delete oldUnknownPropertyPaths[knownKey];
-          }
-          for (var unknownKey in this.unknownPropertyPaths) {
-            if (!oldKnownPropertyPaths[unknownKey]) {
-              oldUnknownPropertyPaths[unknownKey] = true;
-            }
-          }
-        }
-      } else if (error) {
-        errors.push(error);
-      }
-    }
-    if (this.trackUnknownProperties) {
-      this.unknownPropertyPaths = oldUnknownPropertyPaths;
-      this.knownPropertyPaths = oldKnownPropertyPaths;
-    }
-    if (validIndex === null) {
-      errors = errors.concat(this.errors.slice(startErrorCount));
-      this.errors = this.errors.slice(0, startErrorCount);
-      return this.createError(ErrorCodes.ONE_OF_MISSING, {}, "", "/oneOf", errors);
-    } else {
-      this.errors = this.errors.slice(0, startErrorCount);
-    }
-    return null;
-  };
-
-  ValidatorContext.prototype.validateNot = function validateNot(data, schema, dataPointerPath) {
-    if (schema.not === undefined) {
-      return null;
-    }
-    var oldErrorCount = this.errors.length;
-    var oldUnknownPropertyPaths, oldKnownPropertyPaths;
-    if (this.trackUnknownProperties) {
-      oldUnknownPropertyPaths = this.unknownPropertyPaths;
-      oldKnownPropertyPaths = this.knownPropertyPaths;
-      this.unknownPropertyPaths = {};
-      this.knownPropertyPaths = {};
-    }
-    var error = this.validateAll(data, schema.not, null, null, dataPointerPath);
-    var notErrors = this.errors.slice(oldErrorCount);
-    this.errors = this.errors.slice(0, oldErrorCount);
-    if (this.trackUnknownProperties) {
-      this.unknownPropertyPaths = oldUnknownPropertyPaths;
-      this.knownPropertyPaths = oldKnownPropertyPaths;
-    }
-    if (error === null && notErrors.length === 0) {
-      return this.createError(ErrorCodes.NOT_PASSED, {}, "", "/not");
-    }
-    return null;
-  };
-
-  ValidatorContext.prototype.validateHypermedia = function validateCombinations(data, schema, dataPointerPath) {
-    if (!schema.links) {
-      return null;
-    }
-    var error;
-    for (var i = 0; i < schema.links.length; i++) {
-      var ldo = schema.links[i];
-      if (ldo.rel === "describedby") {
-        var template = new UriTemplate(ldo.href);
-        var allPresent = true;
-        for (var j = 0; j < template.varNames.length; j++) {
-          if (!(template.varNames[j] in data)) {
-            allPresent = false;
-            break;
-          }
-        }
-        if (allPresent) {
-          var schemaUrl = template.fillFromObject(data);
-          var subSchema = {"$ref": schemaUrl};
-          if (error = this.validateAll(data, subSchema, [], ["links", i], dataPointerPath)) {
-            return error;
-          }
-        }
-      }
-    }
-  };
-
-// parseURI() and resolveUrl() are from https://gist.github.com/1088850
-//   -  released as public domain by author ("Yaffle") - see comments on gist
-
-  function parseURI(url) {
-    var m = String(url).replace(/^\s+|\s+$/g, '').match(/^([^:\/?#]+:)?(\/\/(?:[^:@]*(?::[^:@]*)?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/);
-    // authority = '//' + user + ':' + pass '@' + hostname + ':' port
-    return (m ? {
-      href     : m[0] || '',
-      protocol : m[1] || '',
-      authority: m[2] || '',
-      host     : m[3] || '',
-      hostname : m[4] || '',
-      port     : m[5] || '',
-      pathname : m[6] || '',
-      search   : m[7] || '',
-      hash     : m[8] || ''
-    } : null);
-  }
-
-  function resolveUrl(base, href) {// RFC 3986
-
-    function removeDotSegments(input) {
-      var output = [];
-      input.replace(/^(\.\.?(\/|$))+/, '')
-        .replace(/\/(\.(\/|$))+/g, '/')
-        .replace(/\/\.\.$/, '/../')
-        .replace(/\/?[^\/]*/g, function (p) {
-          if (p === '/..') {
-            output.pop();
-          } else {
-            output.push(p);
-          }
-        });
-      return output.join('').replace(/^\//, input.charAt(0) === '/' ? '/' : '');
-    }
-
-    href = parseURI(href || '');
-    base = parseURI(base || '');
-
-    return !href || !base ? null : (href.protocol || base.protocol) +
-      (href.protocol || href.authority ? href.authority : base.authority) +
-      removeDotSegments(href.protocol || href.authority || href.pathname.charAt(0) === '/' ? href.pathname : (href.pathname ? ((base.authority && !base.pathname ? '/' : '') + base.pathname.slice(0, base.pathname.lastIndexOf('/') + 1) + href.pathname) : base.pathname)) +
-      (href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) +
-      href.hash;
-  }
-
-  function getDocumentUri(uri) {
-    return uri.split('#')[0];
-  }
-  function normSchema(schema, baseUri) {
-    if (schema && typeof schema === "object") {
-      if (baseUri === undefined) {
-        baseUri = schema.id;
-      } else if (typeof schema.id === "string") {
-        baseUri = resolveUrl(baseUri, schema.id);
-        schema.id = baseUri;
-      }
-      if (Array.isArray(schema)) {
-        for (var i = 0; i < schema.length; i++) {
-          normSchema(schema[i], baseUri);
-        }
-      } else {
-        if (typeof schema['$ref'] === "string") {
-          schema['$ref'] = resolveUrl(baseUri, schema['$ref']);
-        }
-        for (var key in schema) {
-          if (key !== "enum") {
-            normSchema(schema[key], baseUri);
-          }
-        }
-      }
-    }
-  }
-
-  var ErrorCodes = {
-    INVALID_TYPE: 0,
-    ENUM_MISMATCH: 1,
-    ANY_OF_MISSING: 10,
-    ONE_OF_MISSING: 11,
-    ONE_OF_MULTIPLE: 12,
-    NOT_PASSED: 13,
-    // Numeric errors
-    NUMBER_MULTIPLE_OF: 100,
-    NUMBER_MINIMUM: 101,
-    NUMBER_MINIMUM_EXCLUSIVE: 102,
-    NUMBER_MAXIMUM: 103,
-    NUMBER_MAXIMUM_EXCLUSIVE: 104,
-    // String errors
-    STRING_LENGTH_SHORT: 200,
-    STRING_LENGTH_LONG: 201,
-    STRING_PATTERN: 202,
-    // Object errors
-    OBJECT_PROPERTIES_MINIMUM: 300,
-    OBJECT_PROPERTIES_MAXIMUM: 301,
-    OBJECT_REQUIRED: 302,
-    OBJECT_ADDITIONAL_PROPERTIES: 303,
-    OBJECT_DEPENDENCY_KEY: 304,
-    // Array errors
-    ARRAY_LENGTH_SHORT: 400,
-    ARRAY_LENGTH_LONG: 401,
-    ARRAY_UNIQUE: 402,
-    ARRAY_ADDITIONAL_ITEMS: 403,
-    // Custom/user-defined errors
-    FORMAT_CUSTOM: 500,
-    KEYWORD_CUSTOM: 501,
-    // Schema structure
-    CIRCULAR_REFERENCE: 600,
-    // Non-standard validation options
-    UNKNOWN_PROPERTY: 1000
-  };
-  var ErrorCodeLookup = {};
-  for (var key in ErrorCodes) {
-    ErrorCodeLookup[ErrorCodes[key]] = key;
-  }
-  var ErrorMessagesDefault = {
-    INVALID_TYPE: "Invalid type: {type} (expected {expected})",
-    ENUM_MISMATCH: "No enum match for: {value}",
-    ANY_OF_MISSING: "Data does not match any schemas from \"anyOf\"",
-    ONE_OF_MISSING: "Data does not match any schemas from \"oneOf\"",
-    ONE_OF_MULTIPLE: "Data is valid against more than one schema from \"oneOf\": indices {index1} and {index2}",
-    NOT_PASSED: "Data matches schema from \"not\"",
-    // Numeric errors
-    NUMBER_MULTIPLE_OF: "Value {value} is not a multiple of {multipleOf}",
-    NUMBER_MINIMUM: "Value {value} is less than minimum {minimum}",
-    NUMBER_MINIMUM_EXCLUSIVE: "Value {value} is equal to exclusive minimum {minimum}",
-    NUMBER_MAXIMUM: "Value {value} is greater than maximum {maximum}",
-    NUMBER_MAXIMUM_EXCLUSIVE: "Value {value} is equal to exclusive maximum {maximum}",
-    // String errors
-    STRING_LENGTH_SHORT: "String is too short ({length} chars), minimum {minimum}",
-    STRING_LENGTH_LONG: "String is too long ({length} chars), maximum {maximum}",
-    STRING_PATTERN: "String does not match pattern: {pattern}",
-    // Object errors
-    OBJECT_PROPERTIES_MINIMUM: "Too few properties defined ({propertyCount}), minimum {minimum}",
-    OBJECT_PROPERTIES_MAXIMUM: "Too many properties defined ({propertyCount}), maximum {maximum}",
-    OBJECT_REQUIRED: "Missing required property: {key}",
-    OBJECT_ADDITIONAL_PROPERTIES: "Additional properties not allowed",
-    OBJECT_DEPENDENCY_KEY: "Dependency failed - key must exist: {missing} (due to key: {key})",
-    // Array errors
-    ARRAY_LENGTH_SHORT: "Array is too short ({length}), minimum {minimum}",
-    ARRAY_LENGTH_LONG: "Array is too long ({length}), maximum {maximum}",
-    ARRAY_UNIQUE: "Array items are not unique (indices {match1} and {match2})",
-    ARRAY_ADDITIONAL_ITEMS: "Additional items not allowed",
-    // Format errors
-    FORMAT_CUSTOM: "Format validation failed ({message})",
-    KEYWORD_CUSTOM: "Keyword failed: {key} ({message})",
-    // Schema structure
-    CIRCULAR_REFERENCE: "Circular $refs: {urls}",
-    // Non-standard validation options
-    UNKNOWN_PROPERTY: "Unknown property (not in schema)"
-  };
-
-  function ValidationError(code, message, params, dataPath, schemaPath, subErrors) {
-    Error.call(this);
-    if (code === undefined) {
-      throw new Error ("No code supplied for error: "+ message);
-    }
-    this.message = message;
-    this.params = params;
-    this.code = code;
-    this.dataPath = dataPath || "";
-    this.schemaPath = schemaPath || "";
-    this.subErrors = subErrors || null;
-
-    var err = new Error(this.message);
-    this.stack = err.stack || err.stacktrace;
-    if (!this.stack) {
-      try {
-        throw err;
-      }
-      catch(err) {
-        this.stack = err.stack || err.stacktrace;
-      }
-    }
-  }
-  ValidationError.prototype = Object.create(Error.prototype);
-  ValidationError.prototype.constructor = ValidationError;
-  ValidationError.prototype.name = 'ValidationError';
-
-  ValidationError.prototype.prefixWith = function (dataPrefix, schemaPrefix) {
-    if (dataPrefix !== null) {
-      dataPrefix = dataPrefix.replace(/~/g, "~0").replace(/\//g, "~1");
-      this.dataPath = "/" + dataPrefix + this.dataPath;
-    }
-    if (schemaPrefix !== null) {
-      schemaPrefix = schemaPrefix.replace(/~/g, "~0").replace(/\//g, "~1");
-      this.schemaPath = "/" + schemaPrefix + this.schemaPath;
-    }
-    if (this.subErrors !== null) {
-      for (var i = 0; i < this.subErrors.length; i++) {
-        this.subErrors[i].prefixWith(dataPrefix, schemaPrefix);
-      }
-    }
-    return this;
-  };
-
-  function isTrustedUrl(baseUrl, testUrl) {
-    if(testUrl.substring(0, baseUrl.length) === baseUrl){
-      var remainder = testUrl.substring(baseUrl.length);
-      if ((testUrl.length > 0 && testUrl.charAt(baseUrl.length - 1) === "/")
-        || remainder.charAt(0) === "#"
-        || remainder.charAt(0) === "?") {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  var languages = {};
-  function createApi(language) {
-    var globalContext = new ValidatorContext();
-    var currentLanguage = language || 'en';
-    var api = {
-      addFormat: function () {
-        globalContext.addFormat.apply(globalContext, arguments);
-      },
-      language: function (code) {
-        if (!code) {
-          return currentLanguage;
-        }
-        if (!languages[code]) {
-          code = code.split('-')[0]; // fall back to base language
-        }
-        if (languages[code]) {
-          currentLanguage = code;
-          return code; // so you can tell if fall-back has happened
-        }
-        return false;
-      },
-      addLanguage: function (code, messageMap) {
-        var key;
-        for (key in ErrorCodes) {
-          if (messageMap[key] && !messageMap[ErrorCodes[key]]) {
-            messageMap[ErrorCodes[key]] = messageMap[key];
-          }
-        }
-        var rootCode = code.split('-')[0];
-        if (!languages[rootCode]) { // use for base language if not yet defined
-          languages[code] = messageMap;
-          languages[rootCode] = messageMap;
-        } else {
-          languages[code] = Object.create(languages[rootCode]);
-          for (key in messageMap) {
-            if (typeof languages[rootCode][key] === 'undefined') {
-              languages[rootCode][key] = messageMap[key];
-            }
-            languages[code][key] = messageMap[key];
-          }
-        }
-        return this;
-      },
-      freshApi: function (language) {
-        var result = createApi();
-        if (language) {
-          result.language(language);
-        }
-        return result;
-      },
-      validate: function (data, schema, checkRecursive, banUnknownProperties) {
-        var context = new ValidatorContext(globalContext, false, languages[currentLanguage], checkRecursive, banUnknownProperties);
-        if (typeof schema === "string") {
-          schema = {"$ref": schema};
-        }
-        context.addSchema("", schema);
-        var error = context.validateAll(data, schema, null, null, "");
-        if (!error && banUnknownProperties) {
-          error = context.banUnknownProperties();
-        }
-        this.error = error;
-        this.missing = context.missing;
-        this.valid = (error === null);
-        return this.valid;
-      },
-      validateResult: function () {
-        var result = {};
-        this.validate.apply(result, arguments);
-        return result;
-      },
-      validateMultiple: function (data, schema, checkRecursive, banUnknownProperties) {
-        var context = new ValidatorContext(globalContext, true, languages[currentLanguage], checkRecursive, banUnknownProperties);
-        if (typeof schema === "string") {
-          schema = {"$ref": schema};
-        }
-        context.addSchema("", schema);
-        context.validateAll(data, schema, null, null, "");
-        if (banUnknownProperties) {
-          context.banUnknownProperties();
-        }
-        var result = {};
-        result.errors = context.errors;
-        result.missing = context.missing;
-        result.valid = (result.errors.length === 0);
-        return result;
-      },
-      addSchema: function () {
-        return globalContext.addSchema.apply(globalContext, arguments);
-      },
-      getSchema: function () {
-        return globalContext.getSchema.apply(globalContext, arguments);
-      },
-      getSchemaMap: function () {
-        return globalContext.getSchemaMap.apply(globalContext, arguments);
-      },
-      getSchemaUris: function () {
-        return globalContext.getSchemaUris.apply(globalContext, arguments);
-      },
-      getMissingUris: function () {
-        return globalContext.getMissingUris.apply(globalContext, arguments);
-      },
-      dropSchemas: function () {
-        globalContext.dropSchemas.apply(globalContext, arguments);
-      },
-      defineKeyword: function () {
-        globalContext.defineKeyword.apply(globalContext, arguments);
-      },
-      defineError: function (codeName, codeNumber, defaultMessage) {
-        if (typeof codeName !== 'string' || !/^[A-Z]+(_[A-Z]+)*$/.test(codeName)) {
-          throw new Error('Code name must be a string in UPPER_CASE_WITH_UNDERSCORES');
-        }
-        if (typeof codeNumber !== 'number' || codeNumber%1 !== 0 || codeNumber < 10000) {
-          throw new Error('Code number must be an integer > 10000');
-        }
-        if (typeof ErrorCodes[codeName] !== 'undefined') {
-          throw new Error('Error already defined: ' + codeName + ' as ' + ErrorCodes[codeName]);
-        }
-        if (typeof ErrorCodeLookup[codeNumber] !== 'undefined') {
-          throw new Error('Error code already used: ' + ErrorCodeLookup[codeNumber] + ' as ' + codeNumber);
-        }
-        ErrorCodes[codeName] = codeNumber;
-        ErrorCodeLookup[codeNumber] = codeName;
-        ErrorMessagesDefault[codeName] = ErrorMessagesDefault[codeNumber] = defaultMessage;
-        for (var langCode in languages) {
-          var language = languages[langCode];
-          if (language[codeName]) {
-            language[codeNumber] = language[codeNumber] || language[codeName];
-          }
-        }
-      },
-      reset: function () {
-        globalContext.reset();
-        this.error = null;
-        this.missing = [];
-        this.valid = true;
-      },
-      missing: [],
-      error: null,
-      valid: true,
-      normSchema: normSchema,
-      resolveUrl: resolveUrl,
-      getDocumentUri: getDocumentUri,
-      errorCodes: ErrorCodes
-    };
-    return api;
-  }
-
-  var tv4 = createApi();
-  tv4.addLanguage('en-gb', ErrorMessagesDefault);
-
-//legacy property
-  tv4.tv4 = tv4;
-
-  return tv4; // used by _header.js to globalise.
-
-}));


[34/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/data/metrics/metric2.json
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/data/metrics/metric2.json b/contrib/views/slider/src/main/resources/ui/app/assets/data/metrics/metric2.json
deleted file mode 100644
index c382dd8..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/data/metrics/metric2.json
+++ /dev/null
@@ -1,3838 +0,0 @@
-{
-  "metrics" : {
-    "jvm" : {
-      "threadsBlocked" : [
-        [
-          0.0,
-          1401359115
-        ],
-        [
-          0.0,
-          1401359130
-        ],
-        [
-          0.0,
-          1401359145
-        ],
-        [
-          0.0,
-          1401359160
-        ],
-        [
-          0.0,
-          1401359175
-        ],
-        [
-          0.0,
-          1401359190
-        ],
-        [
-          0.0,
-          1401359205
-        ],
-        [
-          0.0,
-          1401359220
-        ],
-        [
-          0.0,
-          1401359235
-        ],
-        [
-          0.0,
-          1401359250
-        ],
-        [
-          0.0,
-          1401359265
-        ],
-        [
-          0.0,
-          1401359280
-        ],
-        [
-          0.0,
-          1401359295
-        ],
-        [
-          0.0,
-          1401359310
-        ],
-        [
-          0.0,
-          1401359325
-        ],
-        [
-          0.0,
-          1401359340
-        ],
-        [
-          0.0,
-          1401359355
-        ],
-        [
-          0.0,
-          1401359370
-        ],
-        [
-          0.0,
-          1401359385
-        ],
-        [
-          0.0,
-          1401359400
-        ],
-        [
-          0.0,
-          1401359415
-        ],
-        [
-          0.0,
-          1401359430
-        ],
-        [
-          0.0,
-          1401359445
-        ],
-        [
-          0.0,
-          1401359460
-        ],
-        [
-          0.0,
-          1401359475
-        ],
-        [
-          0.0,
-          1401359490
-        ],
-        [
-          0.0,
-          1401359505
-        ],
-        [
-          0.0,
-          1401359520
-        ],
-        [
-          0.0,
-          1401359535
-        ],
-        [
-          0.0,
-          1401359550
-        ],
-        [
-          0.0,
-          1401359565
-        ],
-        [
-          0.0,
-          1401359580
-        ],
-        [
-          0.0,
-          1401359595
-        ],
-        [
-          0.0,
-          1401359610
-        ],
-        [
-          0.0,
-          1401359625
-        ],
-        [
-          0.0,
-          1401359640
-        ],
-        [
-          0.0,
-          1401359655
-        ],
-        [
-          0.0,
-          1401359670
-        ],
-        [
-          0.0,
-          1401359685
-        ],
-        [
-          0.0,
-          1401359700
-        ],
-        [
-          0.0,
-          1401359715
-        ],
-        [
-          0.0,
-          1401359730
-        ],
-        [
-          0.0,
-          1401359745
-        ],
-        [
-          0.0,
-          1401359760
-        ],
-        [
-          0.0,
-          1401359775
-        ],
-        [
-          0.0,
-          1401359790
-        ],
-        [
-          0.0,
-          1401359805
-        ],
-        [
-          0.0,
-          1401359820
-        ],
-        [
-          0.0,
-          1401359835
-        ],
-        [
-          0.0,
-          1401359850
-        ],
-        [
-          0.0,
-          1401359865
-        ],
-        [
-          0.0,
-          1401359880
-        ],
-        [
-          0.0,
-          1401359895
-        ],
-        [
-          0.0,
-          1401359910
-        ],
-        [
-          0.0,
-          1401359925
-        ],
-        [
-          0.0,
-          1401359940
-        ],
-        [
-          0.0,
-          1401359955
-        ],
-        [
-          0.0,
-          1401359970
-        ],
-        [
-          0.0,
-          1401359985
-        ],
-        [
-          0.0,
-          1401360000
-        ],
-        [
-          0.0,
-          1401360015
-        ],
-        [
-          0.0,
-          1401360030
-        ],
-        [
-          0.0,
-          1401360045
-        ],
-        [
-          0.0,
-          1401360060
-        ],
-        [
-          0.0,
-          1401360075
-        ],
-        [
-          0.0,
-          1401360090
-        ],
-        [
-          0.0,
-          1401360105
-        ],
-        [
-          0.0,
-          1401360120
-        ],
-        [
-          0.0,
-          1401360135
-        ],
-        [
-          0.0,
-          1401360150
-        ],
-        [
-          0.0,
-          1401360165
-        ],
-        [
-          0.0,
-          1401360180
-        ],
-        [
-          0.0,
-          1401360195
-        ],
-        [
-          0.0,
-          1401360210
-        ],
-        [
-          0.0,
-          1401360225
-        ],
-        [
-          0.0,
-          1401360240
-        ],
-        [
-          0.0,
-          1401360255
-        ],
-        [
-          0.0,
-          1401360270
-        ],
-        [
-          0.0,
-          1401360285
-        ],
-        [
-          0.0,
-          1401360300
-        ],
-        [
-          0.0,
-          1401360315
-        ],
-        [
-          0.0,
-          1401360330
-        ],
-        [
-          0.0,
-          1401360345
-        ],
-        [
-          0.0,
-          1401360360
-        ],
-        [
-          0.0,
-          1401360375
-        ],
-        [
-          0.0,
-          1401360390
-        ],
-        [
-          0.0,
-          1401360405
-        ],
-        [
-          0.0,
-          1401360420
-        ],
-        [
-          0.0,
-          1401360435
-        ],
-        [
-          0.0,
-          1401360450
-        ],
-        [
-          0.0,
-          1401360465
-        ],
-        [
-          0.0,
-          1401360480
-        ],
-        [
-          0.0,
-          1401360495
-        ],
-        [
-          0.0,
-          1401360510
-        ],
-        [
-          0.0,
-          1401360525
-        ],
-        [
-          0.0,
-          1401360540
-        ],
-        [
-          0.0,
-          1401360555
-        ],
-        [
-          0.0,
-          1401360570
-        ],
-        [
-          0.0,
-          1401360585
-        ],
-        [
-          0.0,
-          1401360600
-        ],
-        [
-          0.0,
-          1401360615
-        ],
-        [
-          0.0,
-          1401360630
-        ],
-        [
-          0.0,
-          1401360645
-        ],
-        [
-          0.0,
-          1401360660
-        ],
-        [
-          0.0,
-          1401360675
-        ],
-        [
-          0.0,
-          1401360690
-        ],
-        [
-          0.0,
-          1401360705
-        ],
-        [
-          0.0,
-          1401360720
-        ],
-        [
-          0.0,
-          1401360735
-        ],
-        [
-          0.0,
-          1401360750
-        ],
-        [
-          0.0,
-          1401360765
-        ],
-        [
-          0.0,
-          1401360780
-        ],
-        [
-          0.0,
-          1401360795
-        ],
-        [
-          0.0,
-          1401360810
-        ],
-        [
-          0.0,
-          1401360825
-        ],
-        [
-          0.0,
-          1401360840
-        ],
-        [
-          0.0,
-          1401360855
-        ],
-        [
-          0.0,
-          1401360870
-        ],
-        [
-          0.0,
-          1401360885
-        ],
-        [
-          0.0,
-          1401360900
-        ],
-        [
-          0.0,
-          1401360915
-        ],
-        [
-          0.0,
-          1401360930
-        ],
-        [
-          0.0,
-          1401360945
-        ],
-        [
-          0.0,
-          1401360960
-        ],
-        [
-          0.0,
-          1401360975
-        ],
-        [
-          0.0,
-          1401360990
-        ],
-        [
-          0.0,
-          1401361005
-        ],
-        [
-          0.0,
-          1401361020
-        ],
-        [
-          0.0,
-          1401361035
-        ],
-        [
-          0.0,
-          1401361050
-        ],
-        [
-          0.0,
-          1401361065
-        ],
-        [
-          0.0,
-          1401361080
-        ],
-        [
-          0.0,
-          1401361095
-        ],
-        [
-          0.0,
-          1401361110
-        ],
-        [
-          0.0,
-          1401361125
-        ],
-        [
-          0.0,
-          1401361140
-        ],
-        [
-          0.0,
-          1401361155
-        ],
-        [
-          0.0,
-          1401361170
-        ],
-        [
-          0.0,
-          1401361185
-        ],
-        [
-          0.0,
-          1401361200
-        ],
-        [
-          0.0,
-          1401361215
-        ],
-        [
-          0.0,
-          1401361230
-        ],
-        [
-          0.0,
-          1401361245
-        ],
-        [
-          0.0,
-          1401361260
-        ],
-        [
-          0.0,
-          1401361275
-        ],
-        [
-          0.0,
-          1401361290
-        ],
-        [
-          0.0,
-          1401361305
-        ],
-        [
-          0.0,
-          1401361320
-        ],
-        [
-          0.0,
-          1401361335
-        ],
-        [
-          0.0,
-          1401361350
-        ],
-        [
-          0.0,
-          1401361365
-        ],
-        [
-          0.0,
-          1401361380
-        ],
-        [
-          0.0,
-          1401361395
-        ],
-        [
-          0.0,
-          1401361410
-        ],
-        [
-          0.0,
-          1401361425
-        ],
-        [
-          0.0,
-          1401361440
-        ],
-        [
-          0.0,
-          1401361455
-        ],
-        [
-          0.0,
-          1401361470
-        ],
-        [
-          0.0,
-          1401361485
-        ],
-        [
-          0.0,
-          1401361500
-        ],
-        [
-          0.0,
-          1401361515
-        ],
-        [
-          0.0,
-          1401361530
-        ],
-        [
-          0.0,
-          1401361545
-        ],
-        [
-          0.0,
-          1401361560
-        ],
-        [
-          0.0,
-          1401361575
-        ],
-        [
-          0.0,
-          1401361590
-        ],
-        [
-          0.0,
-          1401361605
-        ],
-        [
-          0.0,
-          1401361620
-        ],
-        [
-          0.0,
-          1401361635
-        ],
-        [
-          0.0,
-          1401361650
-        ],
-        [
-          0.0,
-          1401361665
-        ],
-        [
-          0.0,
-          1401361680
-        ],
-        [
-          0.0,
-          1401361695
-        ],
-        [
-          0.0,
-          1401361710
-        ],
-        [
-          0.0,
-          1401361725
-        ],
-        [
-          0.0,
-          1401361740
-        ],
-        [
-          0.0,
-          1401361755
-        ],
-        [
-          0.0,
-          1401361770
-        ],
-        [
-          0.0,
-          1401361785
-        ],
-        [
-          0.0,
-          1401361800
-        ],
-        [
-          0.0,
-          1401361815
-        ],
-        [
-          0.0,
-          1401361830
-        ],
-        [
-          0.0,
-          1401361845
-        ],
-        [
-          0.0,
-          1401361860
-        ],
-        [
-          0.0,
-          1401361875
-        ],
-        [
-          0.0,
-          1401361890
-        ],
-        [
-          0.0,
-          1401361905
-        ],
-        [
-          0.0,
-          1401361920
-        ],
-        [
-          0.0,
-          1401361935
-        ],
-        [
-          0.0,
-          1401361950
-        ],
-        [
-          0.0,
-          1401361965
-        ],
-        [
-          0.0,
-          1401361980
-        ],
-        [
-          0.0,
-          1401361995
-        ],
-        [
-          0.0,
-          1401362010
-        ],
-        [
-          0.0,
-          1401362025
-        ],
-        [
-          0.0,
-          1401362040
-        ],
-        [
-          0.0,
-          1401362055
-        ],
-        [
-          0.0,
-          1401362070
-        ],
-        [
-          0.0,
-          1401362085
-        ],
-        [
-          0.0,
-          1401362100
-        ],
-        [
-          0.0,
-          1401362115
-        ],
-        [
-          0.0,
-          1401362130
-        ],
-        [
-          0.0,
-          1401362145
-        ],
-        [
-          0.0,
-          1401362160
-        ],
-        [
-          0.0,
-          1401362175
-        ],
-        [
-          0.0,
-          1401362190
-        ],
-        [
-          0.0,
-          1401362205
-        ],
-        [
-          0.0,
-          1401362220
-        ],
-        [
-          0.0,
-          1401362235
-        ],
-        [
-          0.0,
-          1401362250
-        ],
-        [
-          0.0,
-          1401362265
-        ],
-        [
-          0.0,
-          1401362280
-        ],
-        [
-          0.0,
-          1401362295
-        ],
-        [
-          0.0,
-          1401362310
-        ],
-        [
-          0.0,
-          1401362325
-        ],
-        [
-          0.0,
-          1401362340
-        ],
-        [
-          0.0,
-          1401362355
-        ],
-        [
-          0.0,
-          1401362370
-        ],
-        [
-          0.0,
-          1401362385
-        ],
-        [
-          0.0,
-          1401362400
-        ],
-        [
-          0.0,
-          1401362415
-        ],
-        [
-          0.0,
-          1401362430
-        ],
-        [
-          0.0,
-          1401362445
-        ],
-        [
-          0.0,
-          1401362460
-        ],
-        [
-          0.0,
-          1401362475
-        ],
-        [
-          0.0,
-          1401362490
-        ],
-        [
-          0.0,
-          1401362505
-        ],
-        [
-          0.0,
-          1401362520
-        ],
-        [
-          0.0,
-          1401362535
-        ],
-        [
-          0.0,
-          1401362550
-        ],
-        [
-          0.0,
-          1401362565
-        ],
-        [
-          0.0,
-          1401362580
-        ],
-        [
-          0.0,
-          1401362595
-        ],
-        [
-          0.0,
-          1401362610
-        ],
-        [
-          0.0,
-          1401362625
-        ],
-        [
-          0.0,
-          1401362640
-        ],
-        [
-          0.0,
-          1401362655
-        ],
-        [
-          0.0,
-          1401362670
-        ],
-        [
-          0.0,
-          1401362685
-        ]
-      ],
-      "threadsRunnable" : [
-        [
-          7.0,
-          1401359115
-        ],
-        [
-          7.0,
-          1401359130
-        ],
-        [
-          7.0,
-          1401359145
-        ],
-        [
-          7.0,
-          1401359160
-        ],
-        [
-          7.0,
-          1401359175
-        ],
-        [
-          7.0,
-          1401359190
-        ],
-        [
-          7.0,
-          1401359205
-        ],
-        [
-          7.0,
-          1401359220
-        ],
-        [
-          7.0,
-          1401359235
-        ],
-        [
-          7.0,
-          1401359250
-        ],
-        [
-          7.0,
-          1401359265
-        ],
-        [
-          7.0,
-          1401359280
-        ],
-        [
-          7.0,
-          1401359295
-        ],
-        [
-          7.0,
-          1401359310
-        ],
-        [
-          7.0,
-          1401359325
-        ],
-        [
-          7.0,
-          1401359340
-        ],
-        [
-          7.0,
-          1401359355
-        ],
-        [
-          7.0,
-          1401359370
-        ],
-        [
-          7.0,
-          1401359385
-        ],
-        [
-          7.0,
-          1401359400
-        ],
-        [
-          7.06666666667,
-          1401359415
-        ],
-        [
-          8.0,
-          1401359430
-        ],
-        [
-          7.93333333333,
-          1401359445
-        ],
-        [
-          7.0,
-          1401359460
-        ],
-        [
-          7.0,
-          1401359475
-        ],
-        [
-          7.0,
-          1401359490
-        ],
-        [
-          7.0,
-          1401359505
-        ],
-        [
-          7.0,
-          1401359520
-        ],
-        [
-          7.0,
-          1401359535
-        ],
-        [
-          7.0,
-          1401359550
-        ],
-        [
-          7.0,
-          1401359565
-        ],
-        [
-          7.0,
-          1401359580
-        ],
-        [
-          7.13333333333,
-          1401359595
-        ],
-        [
-          7.93333333333,
-          1401359610
-        ],
-        [
-          7.0,
-          1401359625
-        ],
-        [
-          7.0,
-          1401359640
-        ],
-        [
-          7.0,
-          1401359655
-        ],
-        [
-          7.06666666667,
-          1401359670
-        ],
-        [
-          7.93333333333,
-          1401359685
-        ],
-        [
-          7.0,
-          1401359700
-        ],
-        [
-          7.0,
-          1401359715
-        ],
-        [
-          7.0,
-          1401359730
-        ],
-        [
-          7.0,
-          1401359745
-        ],
-        [
-          7.0,
-          1401359760
-        ],
-        [
-          7.0,
-          1401359775
-        ],
-        [
-          7.13333333333,
-          1401359790
-        ],
-        [
-          7.86666666667,
-          1401359805
-        ],
-        [
-          7.0,
-          1401359820
-        ],
-        [
-          7.13333333333,
-          1401359835
-        ],
-        [
-          7.86666666667,
-          1401359850
-        ],
-        [
-          7.0,
-          1401359865
-        ],
-        [
-          7.0,
-          1401359880
-        ],
-        [
-          7.0,
-          1401359895
-        ],
-        [
-          7.0,
-          1401359910
-        ],
-        [
-          7.0,
-          1401359925
-        ],
-        [
-          7.0,
-          1401359940
-        ],
-        [
-          7.0,
-          1401359955
-        ],
-        [
-          7.0,
-          1401359970
-        ],
-        [
-          7.0,
-          1401359985
-        ],
-        [
-          7.0,
-          1401360000
-        ],
-        [
-          8.0,
-          1401360015
-        ],
-        [
-          7.0,
-          1401360030
-        ],
-        [
-          8.0,
-          1401360045
-        ],
-        [
-          7.06666666667,
-          1401360060
-        ],
-        [
-          7.0,
-          1401360075
-        ],
-        [
-          7.0,
-          1401360090
-        ],
-        [
-          7.0,
-          1401360105
-        ],
-        [
-          7.0,
-          1401360120
-        ],
-        [
-          7.0,
-          1401360135
-        ],
-        [
-          8.0,
-          1401360150
-        ],
-        [
-          7.06666666667,
-          1401360165
-        ],
-        [
-          7.0,
-          1401360180
-        ],
-        [
-          7.0,
-          1401360195
-        ],
-        [
-          7.86666666667,
-          1401360210
-        ],
-        [
-          7.13333333333,
-          1401360225
-        ],
-        [
-          7.0,
-          1401360240
-        ],
-        [
-          7.0,
-          1401360255
-        ],
-        [
-          7.0,
-          1401360270
-        ],
-        [
-          7.0,
-          1401360285
-        ],
-        [
-          7.0,
-          1401360300
-        ],
-        [
-          7.0,
-          1401360315
-        ],
-        [
-          7.0,
-          1401360330
-        ],
-        [
-          7.0,
-          1401360345
-        ],
-        [
-          7.0,
-          1401360360
-        ],
-        [
-          7.0,
-          1401360375
-        ],
-        [
-          7.0,
-          1401360390
-        ],
-        [
-          7.0,
-          1401360405
-        ],
-        [
-          7.0,
-          1401360420
-        ],
-        [
-          7.0,
-          1401360435
-        ],
-        [
-          7.0,
-          1401360450
-        ],
-        [
-          7.0,
-          1401360465
-        ],
-        [
-          7.0,
-          1401360480
-        ],
-        [
-          7.8,
-          1401360495
-        ],
-        [
-          7.2,
-          1401360510
-        ],
-        [
-          7.0,
-          1401360525
-        ],
-        [
-          7.0,
-          1401360540
-        ],
-        [
-          7.0,
-          1401360555
-        ],
-        [
-          7.0,
-          1401360570
-        ],
-        [
-          7.0,
-          1401360585
-        ],
-        [
-          7.0,
-          1401360600
-        ],
-        [
-          7.8,
-          1401360615
-        ],
-        [
-          7.2,
-          1401360630
-        ],
-        [
-          7.0,
-          1401360645
-        ],
-        [
-          7.0,
-          1401360660
-        ],
-        [
-          7.0,
-          1401360675
-        ],
-        [
-          7.0,
-          1401360690
-        ],
-        [
-          7.0,
-          1401360705
-        ],
-        [
-          7.0,
-          1401360720
-        ],
-        [
-          7.0,
-          1401360735
-        ],
-        [
-          7.0,
-          1401360750
-        ],
-        [
-          7.0,
-          1401360765
-        ],
-        [
-          7.0,
-          1401360780
-        ],
-        [
-          7.0,
-          1401360795
-        ],
-        [
-          7.0,
-          1401360810
-        ],
-        [
-          7.0,
-          1401360825
-        ],
-        [
-          7.0,
-          1401360840
-        ],
-        [
-          7.0,
-          1401360855
-        ],
-        [
-          7.0,
-          1401360870
-        ],
-        [
-          7.0,
-          1401360885
-        ],
-        [
-          7.0,
-          1401360900
-        ],
-        [
-          7.0,
-          1401360915
-        ],
-        [
-          7.0,
-          1401360930
-        ],
-        [
-          7.0,
-          1401360945
-        ],
-        [
-          7.0,
-          1401360960
-        ],
-        [
-          7.0,
-          1401360975
-        ],
-        [
-          7.0,
-          1401360990
-        ],
-        [
-          7.0,
-          1401361005
-        ],
-        [
-          7.0,
-          1401361020
-        ],
-        [
-          7.0,
-          1401361035
-        ],
-        [
-          7.0,
-          1401361050
-        ],
-        [
-          7.0,
-          1401361065
-        ],
-        [
-          7.0,
-          1401361080
-        ],
-        [
-          7.0,
-          1401361095
-        ],
-        [
-          7.0,
-          1401361110
-        ],
-        [
-          7.0,
-          1401361125
-        ],
-        [
-          7.0,
-          1401361140
-        ],
-        [
-          7.0,
-          1401361155
-        ],
-        [
-          7.0,
-          1401361170
-        ],
-        [
-          7.0,
-          1401361185
-        ],
-        [
-          7.0,
-          1401361200
-        ],
-        [
-          7.0,
-          1401361215
-        ],
-        [
-          7.0,
-          1401361230
-        ],
-        [
-          7.0,
-          1401361245
-        ],
-        [
-          7.0,
-          1401361260
-        ],
-        [
-          7.0,
-          1401361275
-        ],
-        [
-          7.0,
-          1401361290
-        ],
-        [
-          7.0,
-          1401361305
-        ],
-        [
-          7.0,
-          1401361320
-        ],
-        [
-          7.0,
-          1401361335
-        ],
-        [
-          7.0,
-          1401361350
-        ],
-        [
-          7.0,
-          1401361365
-        ],
-        [
-          7.0,
-          1401361380
-        ],
-        [
-          7.0,
-          1401361395
-        ],
-        [
-          7.0,
-          1401361410
-        ],
-        [
-          7.0,
-          1401361425
-        ],
-        [
-          7.0,
-          1401361440
-        ],
-        [
-          7.0,
-          1401361455
-        ],
-        [
-          7.0,
-          1401361470
-        ],
-        [
-          7.0,
-          1401361485
-        ],
-        [
-          7.0,
-          1401361500
-        ],
-        [
-          7.0,
-          1401361515
-        ],
-        [
-          7.0,
-          1401361530
-        ],
-        [
-          7.0,
-          1401361545
-        ],
-        [
-          7.0,
-          1401361560
-        ],
-        [
-          7.0,
-          1401361575
-        ],
-        [
-          7.0,
-          1401361590
-        ],
-        [
-          7.0,
-          1401361605
-        ],
-        [
-          7.0,
-          1401361620
-        ],
-        [
-          7.0,
-          1401361635
-        ],
-        [
-          7.0,
-          1401361650
-        ],
-        [
-          7.0,
-          1401361665
-        ],
-        [
-          7.0,
-          1401361680
-        ],
-        [
-          7.0,
-          1401361695
-        ],
-        [
-          7.0,
-          1401361710
-        ],
-        [
-          7.0,
-          1401361725
-        ],
-        [
-          7.0,
-          1401361740
-        ],
-        [
-          7.0,
-          1401361755
-        ],
-        [
-          7.0,
-          1401361770
-        ],
-        [
-          7.0,
-          1401361785
-        ],
-        [
-          7.0,
-          1401361800
-        ],
-        [
-          7.0,
-          1401361815
-        ],
-        [
-          7.0,
-          1401361830
-        ],
-        [
-          7.0,
-          1401361845
-        ],
-        [
-          7.0,
-          1401361860
-        ],
-        [
-          7.0,
-          1401361875
-        ],
-        [
-          7.0,
-          1401361890
-        ],
-        [
-          7.0,
-          1401361905
-        ],
-        [
-          7.0,
-          1401361920
-        ],
-        [
-          7.0,
-          1401361935
-        ],
-        [
-          7.0,
-          1401361950
-        ],
-        [
-          7.0,
-          1401361965
-        ],
-        [
-          7.0,
-          1401361980
-        ],
-        [
-          7.0,
-          1401361995
-        ],
-        [
-          7.0,
-          1401362010
-        ],
-        [
-          7.0,
-          1401362025
-        ],
-        [
-          7.0,
-          1401362040
-        ],
-        [
-          7.0,
-          1401362055
-        ],
-        [
-          7.0,
-          1401362070
-        ],
-        [
-          7.0,
-          1401362085
-        ],
-        [
-          7.0,
-          1401362100
-        ],
-        [
-          7.0,
-          1401362115
-        ],
-        [
-          7.0,
-          1401362130
-        ],
-        [
-          7.0,
-          1401362145
-        ],
-        [
-          7.0,
-          1401362160
-        ],
-        [
-          7.0,
-          1401362175
-        ],
-        [
-          7.0,
-          1401362190
-        ],
-        [
-          7.0,
-          1401362205
-        ],
-        [
-          7.0,
-          1401362220
-        ],
-        [
-          7.0,
-          1401362235
-        ],
-        [
-          7.0,
-          1401362250
-        ],
-        [
-          7.0,
-          1401362265
-        ],
-        [
-          7.0,
-          1401362280
-        ],
-        [
-          7.0,
-          1401362295
-        ],
-        [
-          7.0,
-          1401362310
-        ],
-        [
-          7.0,
-          1401362325
-        ],
-        [
-          7.0,
-          1401362340
-        ],
-        [
-          7.0,
-          1401362355
-        ],
-        [
-          7.0,
-          1401362370
-        ],
-        [
-          7.0,
-          1401362385
-        ],
-        [
-          7.0,
-          1401362400
-        ],
-        [
-          7.0,
-          1401362415
-        ],
-        [
-          7.0,
-          1401362430
-        ],
-        [
-          7.0,
-          1401362445
-        ],
-        [
-          7.0,
-          1401362460
-        ],
-        [
-          7.0,
-          1401362475
-        ],
-        [
-          7.0,
-          1401362490
-        ],
-        [
-          7.0,
-          1401362505
-        ],
-        [
-          7.0,
-          1401362520
-        ],
-        [
-          7.0,
-          1401362535
-        ],
-        [
-          7.0,
-          1401362550
-        ],
-        [
-          7.0,
-          1401362565
-        ],
-        [
-          7.0,
-          1401362580
-        ],
-        [
-          7.0,
-          1401362595
-        ],
-        [
-          7.0,
-          1401362610
-        ],
-        [
-          7.0,
-          1401362625
-        ],
-        [
-          7.0,
-          1401362640
-        ],
-        [
-          7.0,
-          1401362655
-        ],
-        [
-          7.0,
-          1401362670
-        ],
-        [
-          7.0,
-          1401362685
-        ]
-      ],
-      "threadsTimedWaiting" : [
-        [
-          54.0666666667,
-          1401359115
-        ],
-        [
-          55.0,
-          1401359130
-        ],
-        [
-          55.0,
-          1401359145
-        ],
-        [
-          54.9333333333,
-          1401359160
-        ],
-        [
-          54.0,
-          1401359175
-        ],
-        [
-          54.0,
-          1401359190
-        ],
-        [
-          54.0,
-          1401359205
-        ],
-        [
-          54.0,
-          1401359220
-        ],
-        [
-          54.0,
-          1401359235
-        ],
-        [
-          54.0,
-          1401359250
-        ],
-        [
-          54.0,
-          1401359265
-        ],
-        [
-          54.0,
-          1401359280
-        ],
-        [
-          54.0,
-          1401359295
-        ],
-        [
-          54.0,
-          1401359310
-        ],
-        [
-          54.0,
-          1401359325
-        ],
-        [
-          54.0,
-          1401359340
-        ],
-        [
-          54.0,
-          1401359355
-        ],
-        [
-          54.0,
-          1401359370
-        ],
-        [
-          54.0,
-          1401359385
-        ],
-        [
-          54.0,
-          1401359400
-        ],
-        [
-          53.9333333333,
-          1401359415
-        ],
-        [
-          53.0,
-          1401359430
-        ],
-        [
-          53.0666666667,
-          1401359445
-        ],
-        [
-          54.0,
-          1401359460
-        ],
-        [
-          54.1333333333,
-          1401359475
-        ],
-        [
-          55.0,
-          1401359490
-        ],
-        [
-          55.0,
-          1401359505
-        ],
-        [
-          55.0,
-          1401359520
-        ],
-        [
-          54.8666666667,
-          1401359535
-        ],
-        [
-          54.0,
-          1401359550
-        ],
-        [
-          54.0,
-          1401359565
-        ],
-        [
-          54.0666666667,
-          1401359580
-        ],
-        [
-          54.7333333333,
-          1401359595
-        ],
-        [
-          53.0666666667,
-          1401359610
-        ],
-        [
-          54.0,
-          1401359625
-        ],
-        [
-          54.0666666667,
-          1401359640
-        ],
-        [
-          54.9333333333,
-          1401359655
-        ],
-        [
-          53.9333333333,
-          1401359670
-        ],
-        [
-          53.1333333333,
-          1401359685
-        ],
-        [
-          55.0,
-          1401359700
-        ],
-        [
-          54.8666666667,
-          1401359715
-        ],
-        [
-          54.0,
-          1401359730
-        ],
-        [
-          54.0,
-          1401359745
-        ],
-        [
-          54.0,
-          1401359760
-        ],
-        [
-          54.0,
-          1401359775
-        ],
-        [
-          53.8666666667,
-          1401359790
-        ],
-        [
-          53.1333333333,
-          1401359805
-        ],
-        [
-          54.0,
-          1401359820
-        ],
-        [
-          53.8666666667,
-          1401359835
-        ],
-        [
-          53.1333333333,
-          1401359850
-        ],
-        [
-          54.0,
-          1401359865
-        ],
-        [
-          54.0,
-          1401359880
-        ],
-        [
-          54.0,
-          1401359895
-        ],
-        [
-          54.0,
-          1401359910
-        ],
-        [
-          54.0,
-          1401359925
-        ],
-        [
-          54.0,
-          1401359940
-        ],
-        [
-          54.0,
-          1401359955
-        ],
-        [
-          54.0,
-          1401359970
-        ],
-        [
-          54.0,
-          1401359985
-        ],
-        [
-          54.0,
-          1401360000
-        ],
-        [
-          53.0,
-          1401360015
-        ],
-        [
-          54.0,
-          1401360030
-        ],
-        [
-          52.0,
-          1401360045
-        ],
-        [
-          53.8666666667,
-          1401360060
-        ],
-        [
-          54.0,
-          1401360075
-        ],
-        [
-          54.0,
-          1401360090
-        ],
-        [
-          55.0,
-          1401360105
-        ],
-        [
-          54.0,
-          1401360120
-        ],
-        [
-          54.0,
-          1401360135
-        ],
-        [
-          53.0,
-          1401360150
-        ],
-        [
-          53.9333333333,
-          1401360165
-        ],
-        [
-          54.0,
-          1401360180
-        ],
-        [
-          54.0,
-          1401360195
-        ],
-        [
-          53.1333333333,
-          1401360210
-        ],
-        [
-          53.8666666667,
-          1401360225
-        ],
-        [
-          54.0,
-          1401360240
-        ],
-        [
-          54.0,
-          1401360255
-        ],
-        [
-          54.0,
-          1401360270
-        ],
-        [
-          54.8666666667,
-          1401360285
-        ],
-        [
-          54.0666666667,
-          1401360300
-        ],
-        [
-          54.0,
-          1401360315
-        ],
-        [
-          54.0,
-          1401360330
-        ],
-        [
-          54.0,
-          1401360345
-        ],
-        [
-          54.0,
-          1401360360
-        ],
-        [
-          54.0,
-          1401360375
-        ],
-        [
-          54.0,
-          1401360390
-        ],
-        [
-          54.8666666667,
-          1401360405
-        ],
-        [
-          54.1333333333,
-          1401360420
-        ],
-        [
-          54.0,
-          1401360435
-        ],
-        [
-          54.0,
-          1401360450
-        ],
-        [
-          54.0,
-          1401360465
-        ],
-        [
-          54.0,
-          1401360480
-        ],
-        [
-          53.2,
-          1401360495
-        ],
-        [
-          53.8,
-          1401360510
-        ],
-        [
-          54.0,
-          1401360525
-        ],
-        [
-          54.0,
-          1401360540
-        ],
-        [
-          54.0,
-          1401360555
-        ],
-        [
-          54.0,
-          1401360570
-        ],
-        [
-          54.0,
-          1401360585
-        ],
-        [
-          54.0,
-          1401360600
-        ],
-        [
-          53.2,
-          1401360615
-        ],
-        [
-          53.8,
-          1401360630
-        ],
-        [
-          54.0,
-          1401360645
-        ],
-        [
-          54.0,
-          1401360660
-        ],
-        [
-          54.0,
-          1401360675
-        ],
-        [
-          54.0,
-          1401360690
-        ],
-        [
-          54.0,
-          1401360705
-        ],
-        [
-          54.0,
-          1401360720
-        ],
-        [
-          54.0,
-          1401360735
-        ],
-        [
-          54.0,
-          1401360750
-        ],
-        [
-          54.0,
-          1401360765
-        ],
-        [
-          54.0,
-          1401360780
-        ],
-        [
-          54.0,
-          1401360795
-        ],
-        [
-          54.0,
-          1401360810
-        ],
-        [
-          54.0,
-          1401360825
-        ],
-        [
-          54.0,
-          1401360840
-        ],
-        [
-          54.0,
-          1401360855
-        ],
-        [
-          54.0,
-          1401360870
-        ],
-        [
-          54.0,
-          1401360885
-        ],
-        [
-          54.0,
-          1401360900
-        ],
-        [
-          53.2666666667,
-          1401360915
-        ],
-        [
-          53.7333333333,
-          1401360930
-        ],
-        [
-          54.0,
-          1401360945
-        ],
-        [
-          54.0,
-          1401360960
-        ],
-        [
-          54.0,
-          1401360975
-        ],
-        [
-          54.0,
-          1401360990
-        ],
-        [
-          54.0,
-          1401361005
-        ],
-        [
-          54.0,
-          1401361020
-        ],
-        [
-          54.0,
-          1401361035
-        ],
-        [
-          54.0,
-          1401361050
-        ],
-        [
-          54.0,
-          1401361065
-        ],
-        [
-          54.8,
-          1401361080
-        ],
-        [
-          55.0,
-          1401361095
-        ],
-        [
-          54.2,
-          1401361110
-        ],
-        [
-          54.0,
-          1401361125
-        ],
-        [
-          54.0,
-          1401361140
-        ],
-        [
-          54.0,
-          1401361155
-        ],
-        [
-          54.0,
-          1401361170
-        ],
-        [
-          54.0,
-          1401361185
-        ],
-        [
-          54.0,
-          1401361200
-        ],
-        [
-          54.0,
-          1401361215
-        ],
-        [
-          54.0,
-          1401361230
-        ],
-        [
-          54.7333333333,
-          1401361245
-        ],
-        [
-          55.0,
-          1401361260
-        ],
-        [
-          55.0,
-          1401361275
-        ],
-        [
-          54.2666666667,
-          1401361290
-        ],
-        [
-          54.0,
-          1401361305
-        ],
-        [
-          54.0,
-          1401361320
-        ],
-        [
-          54.0,
-          1401361335
-        ],
-        [
-          54.0,
-          1401361350
-        ],
-        [
-          54.0,
-          1401361365
-        ],
-        [
-          54.7333333333,
-          1401361380
-        ],
-        [
-          55.0,
-          1401361395
-        ],
-        [
-          54.2666666667,
-          1401361410
-        ],
-        [
-          54.0,
-          1401361425
-        ],
-        [
-          54.0,
-          1401361440
-        ],
-        [
-          54.0,
-          1401361455
-        ],
-        [
-          54.0,
-          1401361470
-        ],
-        [
-          54.0,
-          1401361485
-        ],
-        [
-          54.0,
-          1401361500
-        ],
-        [
-          54.0,
-          1401361515
-        ],
-        [
-          54.0,
-          1401361530
-        ],
-        [
-          54.0,
-          1401361545
-        ],
-        [
-          54.0,
-          1401361560
-        ],
-        [
-          54.0,
-          1401361575
-        ],
-        [
-          54.0,
-          1401361590
-        ],
-        [
-          54.0,
-          1401361605
-        ],
-        [
-          54.0,
-          1401361620
-        ],
-        [
-          54.0,
-          1401361635
-        ],
-        [
-          54.0,
-          1401361650
-        ],
-        [
-          54.0,
-          1401361665
-        ],
-        [
-          54.0,
-          1401361680
-        ],
-        [
-          54.0,
-          1401361695
-        ],
-        [
-          54.0,
-          1401361710
-        ],
-        [
-          53.2666666667,
-          1401361725
-        ],
-        [
-          53.7333333333,
-          1401361740
-        ],
-        [
-          54.0,
-          1401361755
-        ],
-        [
-          54.0,
-          1401361770
-        ],
-        [
-          54.0,
-          1401361785
-        ],
-        [
-          54.0,
-          1401361800
-        ],
-        [
-          54.0,
-          1401361815
-        ],
-        [
-          54.0,
-          1401361830
-        ],
-        [
-          54.0,
-          1401361845
-        ],
-        [
-          54.0,
-          1401361860
-        ],
-        [
-          54.0,
-          1401361875
-        ],
-        [
-          54.0,
-          1401361890
-        ],
-        [
-          54.0,
-          1401361905
-        ],
-        [
-          54.0,
-          1401361920
-        ],
-        [
-          54.0,
-          1401361935
-        ],
-        [
-          54.0,
-          1401361950
-        ],
-        [
-          54.0,
-          1401361965
-        ],
-        [
-          54.0,
-          1401361980
-        ],
-        [
-          54.0,
-          1401361995
-        ],
-        [
-          54.0,
-          1401362010
-        ],
-        [
-          54.0,
-          1401362025
-        ],
-        [
-          54.0,
-          1401362040
-        ],
-        [
-          54.0,
-          1401362055
-        ],
-        [
-          54.0,
-          1401362070
-        ],
-        [
-          54.0,
-          1401362085
-        ],
-        [
-          54.0,
-          1401362100
-        ],
-        [
-          54.0,
-          1401362115
-        ],
-        [
-          54.0,
-          1401362130
-        ],
-        [
-          54.0,
-          1401362145
-        ],
-        [
-          54.0,
-          1401362160
-        ],
-        [
-          54.0,
-          1401362175
-        ],
-        [
-          54.7333333333,
-          1401362190
-        ],
-        [
-          55.0,
-          1401362205
-        ],
-        [
-          55.0,
-          1401362220
-        ],
-        [
-          54.2,
-          1401362235
-        ],
-        [
-          54.0,
-          1401362250
-        ],
-        [
-          54.0,
-          1401362265
-        ],
-        [
-          54.0,
-          1401362280
-        ],
-        [
-          54.0,
-          1401362295
-        ],
-        [
-          54.0,
-          1401362310
-        ],
-        [
-          54.0,
-          1401362325
-        ],
-        [
-          54.0,
-          1401362340
-        ],
-        [
-          54.0,
-          1401362355
-        ],
-        [
-          54.0,
-          1401362370
-        ],
-        [
-          54.0,
-          1401362385
-        ],
-        [
-          54.0,
-          1401362400
-        ],
-        [
-          54.0,
-          1401362415
-        ],
-        [
-          54.0,
-          1401362430
-        ],
-        [
-          54.0,
-          1401362445
-        ],
-        [
-          54.0,
-          1401362460
-        ],
-        [
-          54.0,
-          1401362475
-        ],
-        [
-          54.0,
-          1401362490
-        ],
-        [
-          54.0,
-          1401362505
-        ],
-        [
-          54.0,
-          1401362520
-        ],
-        [
-          54.0,
-          1401362535
-        ],
-        [
-          54.0,
-          1401362550
-        ],
-        [
-          54.0,
-          1401362565
-        ],
-        [
-          54.0,
-          1401362580
-        ],
-        [
-          54.0,
-          1401362595
-        ],
-        [
-          54.0,
-          1401362610
-        ],
-        [
-          54.0,
-          1401362625
-        ],
-        [
-          54.6666666667,
-          1401362640
-        ],
-        [
-          55.0,
-          1401362655
-        ],
-        [
-          54.2666666667,
-          1401362670
-        ],
-        [
-          54.0,
-          1401362685
-        ]
-      ],
-      "threadsWaiting" : [
-        [
-          4.0,
-          1401359115
-        ],
-        [
-          4.0,
-          1401359130
-        ],
-        [
-          4.0,
-          1401359145
-        ],
-        [
-          4.0,
-          1401359160
-        ],
-        [
-          4.0,
-          1401359175
-        ],
-        [
-          4.0,
-          1401359190
-        ],
-        [
-          4.0,
-          1401359205
-        ],
-        [
-          4.0,
-          1401359220
-        ],
-        [
-          4.0,
-          1401359235
-        ],
-        [
-          4.0,
-          1401359250
-        ],
-        [
-          4.0,
-          1401359265
-        ],
-        [
-          4.0,
-          1401359280
-        ],
-        [
-          4.0,
-          1401359295
-        ],
-        [
-          4.0,
-          1401359310
-        ],
-        [
-          4.0,
-          1401359325
-        ],
-        [
-          4.0,
-          1401359340
-        ],
-        [
-          4.0,
-          1401359355
-        ],
-        [
-          4.0,
-          1401359370
-        ],
-        [
-          4.0,
-          1401359385
-        ],
-        [
-          4.0,
-          1401359400
-        ],
-        [
-          4.0,
-          1401359415
-        ],
-        [
-          4.0,
-          1401359430
-        ],
-        [
-          4.0,
-          1401359445
-        ],
-        [
-          4.0,
-          1401359460
-        ],
-        [
-          4.0,
-          1401359475
-        ],
-        [
-          4.0,
-          1401359490
-        ],
-        [
-          4.0,
-          1401359505
-        ],
-        [
-          4.0,
-          1401359520
-        ],
-        [
-          4.0,
-          1401359535
-        ],
-        [
-          4.0,
-          1401359550
-        ],
-        [
-          4.0,
-          1401359565
-        ],
-        [
-          4.0,
-          1401359580
-        ],
-        [
-          4.0,
-          1401359595
-        ],
-        [
-          4.0,
-          1401359610
-        ],
-        [
-          4.0,
-          1401359625
-        ],
-        [
-          4.0,
-          1401359640
-        ],
-        [
-          4.0,
-          1401359655
-        ],
-        [
-          4.0,
-          1401359670
-        ],
-        [
-          4.0,
-          1401359685
-        ],
-        [
-          4.0,
-          1401359700
-        ],
-        [
-          4.0,
-          1401359715
-        ],
-        [
-          4.0,
-          1401359730
-        ],
-        [
-          4.0,
-          1401359745
-        ],
-        [
-          4.0,
-          1401359760
-        ],
-        [
-          4.0,
-          1401359775
-        ],
-        [
-          4.0,
-          1401359790
-        ],
-        [
-          4.0,
-          1401359805
-        ],
-        [
-          4.0,
-          1401359820
-        ],
-        [
-          4.0,
-          1401359835
-        ],
-        [
-          4.0,
-          1401359850
-        ],
-        [
-          4.0,
-          1401359865
-        ],
-        [
-          4.0,
-          1401359880
-        ],
-        [
-          4.0,
-          1401359895
-        ],
-        [
-          4.0,
-          1401359910
-        ],
-        [
-          4.0,
-          1401359925
-        ],
-        [
-          4.0,
-          1401359940
-        ],
-        [
-          4.0,
-          1401359955
-        ],
-        [
-          4.0,
-          1401359970
-        ],
-        [
-          4.0,
-          1401359985
-        ],
-        [
-          4.0,
-          1401360000
-        ],
-        [
-          4.0,
-          1401360015
-        ],
-        [
-          4.0,
-          1401360030
-        ],
-        [
-          4.0,
-          1401360045
-        ],
-        [
-          4.0,
-          1401360060
-        ],
-        [
-          4.0,
-          1401360075
-        ],
-        [
-          4.0,
-          1401360090
-        ],
-        [
-          4.0,
-          1401360105
-        ],
-        [
-          4.0,
-          1401360120
-        ],
-        [
-          4.0,
-          1401360135
-        ],
-        [
-          4.0,
-          1401360150
-        ],
-        [
-          4.0,
-          1401360165
-        ],
-        [
-          4.0,
-          1401360180
-        ],
-        [
-          4.0,
-          1401360195
-        ],
-        [
-          4.0,
-          1401360210
-        ],
-        [
-          4.0,
-          1401360225
-        ],
-        [
-          4.0,
-          1401360240
-        ],
-        [
-          4.0,
-          1401360255
-        ],
-        [
-          4.0,
-          1401360270
-        ],
-        [
-          4.0,
-          1401360285
-        ],
-        [
-          4.0,
-          1401360300
-        ],
-        [
-          4.0,
-          1401360315
-        ],
-        [
-          4.0,
-          1401360330
-        ],
-        [
-          4.0,
-          1401360345
-        ],
-        [
-          4.0,
-          1401360360
-        ],
-        [
-          4.0,
-          1401360375
-        ],
-        [
-          4.0,
-          1401360390
-        ],
-        [
-          4.0,
-          1401360405
-        ],
-        [
-          4.0,
-          1401360420
-        ],
-        [
-          4.0,
-          1401360435
-        ],
-        [
-          4.0,
-          1401360450
-        ],
-        [
-          4.0,
-          1401360465
-        ],
-        [
-          4.0,
-          1401360480
-        ],
-        [
-          4.0,
-          1401360495
-        ],
-        [
-          4.0,
-          1401360510
-        ],
-        [
-          4.0,
-          1401360525
-        ],
-        [
-          4.0,
-          1401360540
-        ],
-        [
-          4.0,
-          1401360555
-        ],
-        [
-          4.0,
-          1401360570
-        ],
-        [
-          4.0,
-          1401360585
-        ],
-        [
-          4.0,
-          1401360600
-        ],
-        [
-          4.0,
-          1401360615
-        ],
-        [
-          4.0,
-          1401360630
-        ],
-        [
-          4.0,
-          1401360645
-        ],
-        [
-          4.0,
-          1401360660
-        ],
-        [
-          4.0,
-          1401360675
-        ],
-        [
-          4.0,
-          1401360690
-        ],
-        [
-          4.0,
-          1401360705
-        ],
-        [
-          4.0,
-          1401360720
-        ],
-        [
-          4.0,
-          1401360735
-        ],
-        [
-          4.0,
-          1401360750
-        ],
-        [
-          4.0,
-          1401360765
-        ],
-        [
-          4.0,
-          1401360780
-        ],
-        [
-          4.0,
-          1401360795
-        ],
-        [
-          4.0,
-          1401360810
-        ],
-        [
-          4.0,
-          1401360825
-        ],
-        [
-          4.0,
-          1401360840
-        ],
-        [
-          4.0,
-          1401360855
-        ],
-        [
-          4.0,
-          1401360870
-        ],
-        [
-          4.0,
-          1401360885
-        ],
-        [
-          4.0,
-          1401360900
-        ],
-        [
-          4.0,
-          1401360915
-        ],
-        [
-          4.0,
-          1401360930
-        ],
-        [
-          4.0,
-          1401360945
-        ],
-        [
-          4.0,
-          1401360960
-        ],
-        [
-          4.0,
-          1401360975
-        ],
-        [
-          4.0,
-          1401360990
-        ],
-        [
-          4.0,
-          1401361005
-        ],
-        [
-          4.0,
-          1401361020
-        ],
-        [
-          4.0,
-          1401361035
-        ],
-        [
-          4.0,
-          1401361050
-        ],
-        [
-          4.0,
-          1401361065
-        ],
-        [
-          4.0,
-          1401361080
-        ],
-        [
-          4.0,
-          1401361095
-        ],
-        [
-          4.0,
-          1401361110
-        ],
-        [
-          4.0,
-          1401361125
-        ],
-        [
-          4.0,
-          1401361140
-        ],
-        [
-          4.0,
-          1401361155
-        ],
-        [
-          4.0,
-          1401361170
-        ],
-        [
-          4.0,
-          1401361185
-        ],
-        [
-          4.0,
-          1401361200
-        ],
-        [
-          4.0,
-          1401361215
-        ],
-        [
-          4.0,
-          1401361230
-        ],
-        [
-          4.0,
-          1401361245
-        ],
-        [
-          4.0,
-          1401361260
-        ],
-        [
-          4.0,
-          1401361275
-        ],
-        [
-          4.0,
-          1401361290
-        ],
-        [
-          4.0,
-          1401361305
-        ],
-        [
-          4.0,
-          1401361320
-        ],
-        [
-          4.0,
-          1401361335
-        ],
-        [
-          4.0,
-          1401361350
-        ],
-        [
-          4.0,
-          1401361365
-        ],
-        [
-          4.0,
-          1401361380
-        ],
-        [
-          4.0,
-          1401361395
-        ],
-        [
-          4.0,
-          1401361410
-        ],
-        [
-          4.0,
-          1401361425
-        ],
-        [
-          4.0,
-          1401361440
-        ],
-        [
-          4.0,
-          1401361455
-        ],
-        [
-          4.0,
-          1401361470
-        ],
-        [
-          4.0,
-          1401361485
-        ],
-        [
-          4.0,
-          1401361500
-        ],
-        [
-          4.0,
-          1401361515
-        ],
-        [
-          4.0,
-          1401361530
-        ],
-        [
-          4.0,
-          1401361545
-        ],
-        [
-          4.0,
-          1401361560
-        ],
-        [
-          4.0,
-          1401361575
-        ],
-        [
-          4.0,
-          1401361590
-        ],
-        [
-          4.0,
-          1401361605
-        ],
-        [
-          4.0,
-          1401361620
-        ],
-        [
-          4.0,
-          1401361635
-        ],
-        [
-          4.0,
-          1401361650
-        ],
-        [
-          4.0,
-          1401361665
-        ],
-        [
-          4.0,
-          1401361680
-        ],
-        [
-          4.0,
-          1401361695
-        ],
-        [
-          4.0,
-          1401361710
-        ],
-        [
-          4.0,
-          1401361725
-        ],
-        [
-          4.0,
-          1401361740
-        ],
-        [
-          4.0,
-          1401361755
-        ],
-        [
-          4.0,
-          1401361770
-        ],
-        [
-          4.0,
-          1401361785
-        ],
-        [
-          4.0,
-          1401361800
-        ],
-        [
-          4.0,
-          1401361815
-        ],
-        [
-          4.0,
-          1401361830
-        ],
-        [
-          4.0,
-          1401361845
-        ],
-        [
-          4.0,
-          1401361860
-        ],
-        [
-          4.0,
-          1401361875
-        ],
-        [
-          4.0,
-          1401361890
-        ],
-        [
-          4.0,
-          1401361905
-        ],
-        [
-          4.0,
-          1401361920
-        ],
-        [
-          4.0,
-          1401361935
-        ],
-        [
-          4.0,
-          1401361950
-        ],
-        [
-          4.0,
-          1401361965
-        ],
-        [
-          4.0,
-          1401361980
-        ],
-        [
-          4.0,
-          1401361995
-        ],
-        [
-          4.0,
-          1401362010
-        ],
-        [
-          4.0,
-          1401362025
-        ],
-        [
-          4.0,
-          1401362040
-        ],
-        [
-          4.0,
-          1401362055
-        ],
-        [
-          4.0,
-          1401362070
-        ],
-        [
-          4.0,
-          1401362085
-        ],
-        [
-          4.0,
-          1401362100
-        ],
-        [
-          4.0,
-          1401362115
-        ],
-        [
-          4.0,
-          1401362130
-        ],
-        [
-          4.0,
-          1401362145
-        ],
-        [
-          4.0,
-          1401362160
-        ],
-        [
-          4.0,
-          1401362175
-        ],
-        [
-          4.0,
-          1401362190
-        ],
-        [
-          4.0,
-          1401362205
-        ],
-        [
-          4.0,
-          1401362220
-        ],
-        [
-          4.0,
-          1401362235
-        ],
-        [
-          4.0,
-          1401362250
-        ],
-        [
-          4.0,
-          1401362265
-        ],
-        [
-          4.0,
-          1401362280
-        ],
-        [
-          4.0,
-          1401362295
-        ],
-        [
-          4.0,
-          1401362310
-        ],
-        [
-          4.0,
-          1401362325
-        ],
-        [
-          4.0,
-          1401362340
-        ],
-        [
-          4.0,
-          1401362355
-        ],
-        [
-          4.0,
-          1401362370
-        ],
-        [
-          4.0,
-          1401362385
-        ],
-        [
-          4.0,
-          1401362400
-        ],
-        [
-          4.0,
-          1401362415
-        ],
-        [
-          4.0,
-          1401362430
-        ],
-        [
-          4.0,
-          1401362445
-        ],
-        [
-          4.0,
-          1401362460
-        ],
-        [
-          4.0,
-          1401362475
-        ],
-        [
-          4.0,
-          1401362490
-        ],
-        [
-          4.0,
-          1401362505
-        ],
-        [
-          4.0,
-          1401362520
-        ],
-        [
-          4.0,
-          1401362535
-        ],
-        [
-          4.0,
-          1401362550
-        ],
-        [
-          4.0,
-          1401362565
-        ],
-        [
-          4.0,
-          1401362580
-        ],
-        [
-          4.0,
-          1401362595
-        ],
-        [
-          4.0,
-          1401362610
-        ],
-        [
-          4.0,
-          1401362625
-        ],
-        [
-          4.0,
-          1401362640
-        ],
-        [
-          4.0,
-          1401362655
-        ],
-        [
-          4.0,
-          1401362670
-        ],
-        [
-          4.0,
-          1401362685
-        ]
-      ]
-    }
-  }
-}
\ No newline at end of file


[18/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/handlebars.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/handlebars.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/handlebars.js
deleted file mode 100644
index 96f3e03..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/handlebars.js
+++ /dev/null
@@ -1,2746 +0,0 @@
-/*!
-
- handlebars v1.3.0
-
-Copyright (C) 2011 by Yehuda Katz
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-@license
-*/
-/* exported Handlebars */
-var Handlebars = (function() {
-// handlebars/safe-string.js
-var __module4__ = (function() {
-  "use strict";
-  var __exports__;
-  // Build out our basic SafeString type
-  function SafeString(string) {
-    this.string = string;
-  }
-
-  SafeString.prototype.toString = function() {
-    return "" + this.string;
-  };
-
-  __exports__ = SafeString;
-  return __exports__;
-})();
-
-// handlebars/utils.js
-var __module3__ = (function(__dependency1__) {
-  "use strict";
-  var __exports__ = {};
-  /*jshint -W004 */
-  var SafeString = __dependency1__;
-
-  var escape = {
-    "&": "&amp;",
-    "<": "&lt;",
-    ">": "&gt;",
-    '"': "&quot;",
-    "'": "&#x27;",
-    "`": "&#x60;"
-  };
-
-  var badChars = /[&<>"'`]/g;
-  var possible = /[&<>"'`]/;
-
-  function escapeChar(chr) {
-    return escape[chr] || "&amp;";
-  }
-
-  function extend(obj, value) {
-    for(var key in value) {
-      if(Object.prototype.hasOwnProperty.call(value, key)) {
-        obj[key] = value[key];
-      }
-    }
-  }
-
-  __exports__.extend = extend;var toString = Object.prototype.toString;
-  __exports__.toString = toString;
-  // Sourced from lodash
-  // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt
-  var isFunction = function(value) {
-    return typeof value === 'function';
-  };
-  // fallback for older versions of Chrome and Safari
-  if (isFunction(/x/)) {
-    isFunction = function(value) {
-      return typeof value === 'function' && toString.call(value) === '[object Function]';
-    };
-  }
-  var isFunction;
-  __exports__.isFunction = isFunction;
-  var isArray = Array.isArray || function(value) {
-    return (value && typeof value === 'object') ? toString.call(value) === '[object Array]' : false;
-  };
-  __exports__.isArray = isArray;
-
-  function escapeExpression(string) {
-    // don't escape SafeStrings, since they're already safe
-    if (string instanceof SafeString) {
-      return string.toString();
-    } else if (!string && string !== 0) {
-      return "";
-    }
-
-    // Force a string conversion as this will be done by the append regardless and
-    // the regex test will do this transparently behind the scenes, causing issues if
-    // an object's to string has escaped characters in it.
-    string = "" + string;
-
-    if(!possible.test(string)) { return string; }
-    return string.replace(badChars, escapeChar);
-  }
-
-  __exports__.escapeExpression = escapeExpression;function isEmpty(value) {
-    if (!value && value !== 0) {
-      return true;
-    } else if (isArray(value) && value.length === 0) {
-      return true;
-    } else {
-      return false;
-    }
-  }
-
-  __exports__.isEmpty = isEmpty;
-  return __exports__;
-})(__module4__);
-
-// handlebars/exception.js
-var __module5__ = (function() {
-  "use strict";
-  var __exports__;
-
-  var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];
-
-  function Exception(message, node) {
-    var line;
-    if (node && node.firstLine) {
-      line = node.firstLine;
-
-      message += ' - ' + line + ':' + node.firstColumn;
-    }
-
-    var tmp = Error.prototype.constructor.call(this, message);
-
-    // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
-    for (var idx = 0; idx < errorProps.length; idx++) {
-      this[errorProps[idx]] = tmp[errorProps[idx]];
-    }
-
-    if (line) {
-      this.lineNumber = line;
-      this.column = node.firstColumn;
-    }
-  }
-
-  Exception.prototype = new Error();
-
-  __exports__ = Exception;
-  return __exports__;
-})();
-
-// handlebars/base.js
-var __module2__ = (function(__dependency1__, __dependency2__) {
-  "use strict";
-  var __exports__ = {};
-  var Utils = __dependency1__;
-  var Exception = __dependency2__;
-
-  var VERSION = "1.3.0";
-  __exports__.VERSION = VERSION;var COMPILER_REVISION = 4;
-  __exports__.COMPILER_REVISION = COMPILER_REVISION;
-  var REVISION_CHANGES = {
-    1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it
-    2: '== 1.0.0-rc.3',
-    3: '== 1.0.0-rc.4',
-    4: '>= 1.0.0'
-  };
-  __exports__.REVISION_CHANGES = REVISION_CHANGES;
-  var isArray = Utils.isArray,
-      isFunction = Utils.isFunction,
-      toString = Utils.toString,
-      objectType = '[object Object]';
-
-  function HandlebarsEnvironment(helpers, partials) {
-    this.helpers = helpers || {};
-    this.partials = partials || {};
-
-    registerDefaultHelpers(this);
-  }
-
-  __exports__.HandlebarsEnvironment = HandlebarsEnvironment;HandlebarsEnvironment.prototype = {
-    constructor: HandlebarsEnvironment,
-
-    logger: logger,
-    log: log,
-
-    registerHelper: function(name, fn, inverse) {
-      if (toString.call(name) === objectType) {
-        if (inverse || fn) { throw new Exception('Arg not supported with multiple helpers'); }
-        Utils.extend(this.helpers, name);
-      } else {
-        if (inverse) { fn.not = inverse; }
-        this.helpers[name] = fn;
-      }
-    },
-
-    registerPartial: function(name, str) {
-      if (toString.call(name) === objectType) {
-        Utils.extend(this.partials,  name);
-      } else {
-        this.partials[name] = str;
-      }
-    }
-  };
-
-  function registerDefaultHelpers(instance) {
-    instance.registerHelper('helperMissing', function(arg) {
-      if(arguments.length === 2) {
-        return undefined;
-      } else {
-        throw new Exception("Missing helper: '" + arg + "'");
-      }
-    });
-
-    instance.registerHelper('blockHelperMissing', function(context, options) {
-      var inverse = options.inverse || function() {}, fn = options.fn;
-
-      if (isFunction(context)) { context = context.call(this); }
-
-      if(context === true) {
-        return fn(this);
-      } else if(context === false || context == null) {
-        return inverse(this);
-      } else if (isArray(context)) {
-        if(context.length > 0) {
-          return instance.helpers.each(context, options);
-        } else {
-          return inverse(this);
-        }
-      } else {
-        return fn(context);
-      }
-    });
-
-    instance.registerHelper('each', function(context, options) {
-      var fn = options.fn, inverse = options.inverse;
-      var i = 0, ret = "", data;
-
-      if (isFunction(context)) { context = context.call(this); }
-
-      if (options.data) {
-        data = createFrame(options.data);
-      }
-
-      if(context && typeof context === 'object') {
-        if (isArray(context)) {
-          for(var j = context.length; i<j; i++) {
-            if (data) {
-              data.index = i;
-              data.first = (i === 0);
-              data.last  = (i === (context.length-1));
-            }
-            ret = ret + fn(context[i], { data: data });
-          }
-        } else {
-          for(var key in context) {
-            if(context.hasOwnProperty(key)) {
-              if(data) {
-                data.key = key;
-                data.index = i;
-                data.first = (i === 0);
-              }
-              ret = ret + fn(context[key], {data: data});
-              i++;
-            }
-          }
-        }
-      }
-
-      if(i === 0){
-        ret = inverse(this);
-      }
-
-      return ret;
-    });
-
-    instance.registerHelper('if', function(conditional, options) {
-      if (isFunction(conditional)) { conditional = conditional.call(this); }
-
-      // Default behavior is to render the positive path if the value is truthy and not empty.
-      // The `includeZero` option may be set to treat the condtional as purely not empty based on the
-      // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.
-      if ((!options.hash.includeZero && !conditional) || Utils.isEmpty(conditional)) {
-        return options.inverse(this);
-      } else {
-        return options.fn(this);
-      }
-    });
-
-    instance.registerHelper('unless', function(conditional, options) {
-      return instance.helpers['if'].call(this, conditional, {fn: options.inverse, inverse: options.fn, hash: options.hash});
-    });
-
-    instance.registerHelper('with', function(context, options) {
-      if (isFunction(context)) { context = context.call(this); }
-
-      if (!Utils.isEmpty(context)) return options.fn(context);
-    });
-
-    instance.registerHelper('log', function(context, options) {
-      var level = options.data && options.data.level != null ? parseInt(options.data.level, 10) : 1;
-      instance.log(level, context);
-    });
-  }
-
-  var logger = {
-    methodMap: { 0: 'debug', 1: 'info', 2: 'warn', 3: 'error' },
-
-    // State enum
-    DEBUG: 0,
-    INFO: 1,
-    WARN: 2,
-    ERROR: 3,
-    level: 3,
-
-    // can be overridden in the host environment
-    log: function(level, obj) {
-      if (logger.level <= level) {
-        var method = logger.methodMap[level];
-        if (typeof console !== 'undefined' && console[method]) {
-          console[method].call(console, obj);
-        }
-      }
-    }
-  };
-  __exports__.logger = logger;
-  function log(level, obj) { logger.log(level, obj); }
-
-  __exports__.log = log;var createFrame = function(object) {
-    var obj = {};
-    Utils.extend(obj, object);
-    return obj;
-  };
-  __exports__.createFrame = createFrame;
-  return __exports__;
-})(__module3__, __module5__);
-
-// handlebars/runtime.js
-var __module6__ = (function(__dependency1__, __dependency2__, __dependency3__) {
-  "use strict";
-  var __exports__ = {};
-  var Utils = __dependency1__;
-  var Exception = __dependency2__;
-  var COMPILER_REVISION = __dependency3__.COMPILER_REVISION;
-  var REVISION_CHANGES = __dependency3__.REVISION_CHANGES;
-
-  function checkRevision(compilerInfo) {
-    var compilerRevision = compilerInfo && compilerInfo[0] || 1,
-        currentRevision = COMPILER_REVISION;
-
-    if (compilerRevision !== currentRevision) {
-      if (compilerRevision < currentRevision) {
-        var runtimeVersions = REVISION_CHANGES[currentRevision],
-            compilerVersions = REVISION_CHANGES[compilerRevision];
-        throw new Exception("Template was precompiled with an older version of Handlebars than the current runtime. "+
-              "Please update your precompiler to a newer version ("+runtimeVersions+") or downgrade your runtime to an older version ("+compilerVersions+").");
-      } else {
-        // Use the embedded version info since the runtime doesn't know about this revision yet
-        throw new Exception("Template was precompiled with a newer version of Handlebars than the current runtime. "+
-              "Please update your runtime to a newer version ("+compilerInfo[1]+").");
-      }
-    }
-  }
-
-  __exports__.checkRevision = checkRevision;// TODO: Remove this line and break up compilePartial
-
-  function template(templateSpec, env) {
-    if (!env) {
-      throw new Exception("No environment passed to template");
-    }
-
-    // Note: Using env.VM references rather than local var references throughout this section to allow
-    // for external users to override these as psuedo-supported APIs.
-    var invokePartialWrapper = function(partial, name, context, helpers, partials, data) {
-      var result = env.VM.invokePartial.apply(this, arguments);
-      if (result != null) { return result; }
-
-      if (env.compile) {
-        var options = { helpers: helpers, partials: partials, data: data };
-        partials[name] = env.compile(partial, { data: data !== undefined }, env);
-        return partials[name](context, options);
-      } else {
-        throw new Exception("The partial " + name + " could not be compiled when running in runtime-only mode");
-      }
-    };
-
-    // Just add water
-    var container = {
-      escapeExpression: Utils.escapeExpression,
-      invokePartial: invokePartialWrapper,
-      programs: [],
-      program: function(i, fn, data) {
-        var programWrapper = this.programs[i];
-        if(data) {
-          programWrapper = program(i, fn, data);
-        } else if (!programWrapper) {
-          programWrapper = this.programs[i] = program(i, fn);
-        }
-        return programWrapper;
-      },
-      merge: function(param, common) {
-        var ret = param || common;
-
-        if (param && common && (param !== common)) {
-          ret = {};
-          Utils.extend(ret, common);
-          Utils.extend(ret, param);
-        }
-        return ret;
-      },
-      programWithDepth: env.VM.programWithDepth,
-      noop: env.VM.noop,
-      compilerInfo: null
-    };
-
-    return function(context, options) {
-      options = options || {};
-      var namespace = options.partial ? options : env,
-          helpers,
-          partials;
-
-      if (!options.partial) {
-        helpers = options.helpers;
-        partials = options.partials;
-      }
-      var result = templateSpec.call(
-            container,
-            namespace, context,
-            helpers,
-            partials,
-            options.data);
-
-      if (!options.partial) {
-        env.VM.checkRevision(container.compilerInfo);
-      }
-
-      return result;
-    };
-  }
-
-  __exports__.template = template;function programWithDepth(i, fn, data /*, $depth */) {
-    var args = Array.prototype.slice.call(arguments, 3);
-
-    var prog = function(context, options) {
-      options = options || {};
-
-      return fn.apply(this, [context, options.data || data].concat(args));
-    };
-    prog.program = i;
-    prog.depth = args.length;
-    return prog;
-  }
-
-  __exports__.programWithDepth = programWithDepth;function program(i, fn, data) {
-    var prog = function(context, options) {
-      options = options || {};
-
-      return fn(context, options.data || data);
-    };
-    prog.program = i;
-    prog.depth = 0;
-    return prog;
-  }
-
-  __exports__.program = program;function invokePartial(partial, name, context, helpers, partials, data) {
-    var options = { partial: true, helpers: helpers, partials: partials, data: data };
-
-    if(partial === undefined) {
-      throw new Exception("The partial " + name + " could not be found");
-    } else if(partial instanceof Function) {
-      return partial(context, options);
-    }
-  }
-
-  __exports__.invokePartial = invokePartial;function noop() { return ""; }
-
-  __exports__.noop = noop;
-  return __exports__;
-})(__module3__, __module5__, __module2__);
-
-// handlebars.runtime.js
-var __module1__ = (function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__) {
-  "use strict";
-  var __exports__;
-  /*globals Handlebars: true */
-  var base = __dependency1__;
-
-  // Each of these augment the Handlebars object. No need to setup here.
-  // (This is done to easily share code between commonjs and browse envs)
-  var SafeString = __dependency2__;
-  var Exception = __dependency3__;
-  var Utils = __dependency4__;
-  var runtime = __dependency5__;
-
-  // For compatibility and usage outside of module systems, make the Handlebars object a namespace
-  var create = function() {
-    var hb = new base.HandlebarsEnvironment();
-
-    Utils.extend(hb, base);
-    hb.SafeString = SafeString;
-    hb.Exception = Exception;
-    hb.Utils = Utils;
-
-    hb.VM = runtime;
-    hb.template = function(spec) {
-      return runtime.template(spec, hb);
-    };
-
-    return hb;
-  };
-
-  var Handlebars = create();
-  Handlebars.create = create;
-
-  __exports__ = Handlebars;
-  return __exports__;
-})(__module2__, __module4__, __module5__, __module3__, __module6__);
-
-// handlebars/compiler/ast.js
-var __module7__ = (function(__dependency1__) {
-  "use strict";
-  var __exports__;
-  var Exception = __dependency1__;
-
-  function LocationInfo(locInfo){
-    locInfo = locInfo || {};
-    this.firstLine   = locInfo.first_line;
-    this.firstColumn = locInfo.first_column;
-    this.lastColumn  = locInfo.last_column;
-    this.lastLine    = locInfo.last_line;
-  }
-
-  var AST = {
-    ProgramNode: function(statements, inverseStrip, inverse, locInfo) {
-      var inverseLocationInfo, firstInverseNode;
-      if (arguments.length === 3) {
-        locInfo = inverse;
-        inverse = null;
-      } else if (arguments.length === 2) {
-        locInfo = inverseStrip;
-        inverseStrip = null;
-      }
-
-      LocationInfo.call(this, locInfo);
-      this.type = "program";
-      this.statements = statements;
-      this.strip = {};
-
-      if(inverse) {
-        firstInverseNode = inverse[0];
-        if (firstInverseNode) {
-          inverseLocationInfo = {
-            first_line: firstInverseNode.firstLine,
-            last_line: firstInverseNode.lastLine,
-            last_column: firstInverseNode.lastColumn,
-            first_column: firstInverseNode.firstColumn
-          };
-          this.inverse = new AST.ProgramNode(inverse, inverseStrip, inverseLocationInfo);
-        } else {
-          this.inverse = new AST.ProgramNode(inverse, inverseStrip);
-        }
-        this.strip.right = inverseStrip.left;
-      } else if (inverseStrip) {
-        this.strip.left = inverseStrip.right;
-      }
-    },
-
-    MustacheNode: function(rawParams, hash, open, strip, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type = "mustache";
-      this.strip = strip;
-
-      // Open may be a string parsed from the parser or a passed boolean flag
-      if (open != null && open.charAt) {
-        // Must use charAt to support IE pre-10
-        var escapeFlag = open.charAt(3) || open.charAt(2);
-        this.escaped = escapeFlag !== '{' && escapeFlag !== '&';
-      } else {
-        this.escaped = !!open;
-      }
-
-      if (rawParams instanceof AST.SexprNode) {
-        this.sexpr = rawParams;
-      } else {
-        // Support old AST API
-        this.sexpr = new AST.SexprNode(rawParams, hash);
-      }
-
-      this.sexpr.isRoot = true;
-
-      // Support old AST API that stored this info in MustacheNode
-      this.id = this.sexpr.id;
-      this.params = this.sexpr.params;
-      this.hash = this.sexpr.hash;
-      this.eligibleHelper = this.sexpr.eligibleHelper;
-      this.isHelper = this.sexpr.isHelper;
-    },
-
-    SexprNode: function(rawParams, hash, locInfo) {
-      LocationInfo.call(this, locInfo);
-
-      this.type = "sexpr";
-      this.hash = hash;
-
-      var id = this.id = rawParams[0];
-      var params = this.params = rawParams.slice(1);
-
-      // a mustache is an eligible helper if:
-      // * its id is simple (a single part, not `this` or `..`)
-      var eligibleHelper = this.eligibleHelper = id.isSimple;
-
-      // a mustache is definitely a helper if:
-      // * it is an eligible helper, and
-      // * it has at least one parameter or hash segment
-      this.isHelper = eligibleHelper && (params.length || hash);
-
-      // if a mustache is an eligible helper but not a definite
-      // helper, it is ambiguous, and will be resolved in a later
-      // pass or at runtime.
-    },
-
-    PartialNode: function(partialName, context, strip, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type         = "partial";
-      this.partialName  = partialName;
-      this.context      = context;
-      this.strip = strip;
-    },
-
-    BlockNode: function(mustache, program, inverse, close, locInfo) {
-      LocationInfo.call(this, locInfo);
-
-      if(mustache.sexpr.id.original !== close.path.original) {
-        throw new Exception(mustache.sexpr.id.original + " doesn't match " + close.path.original, this);
-      }
-
-      this.type = 'block';
-      this.mustache = mustache;
-      this.program  = program;
-      this.inverse  = inverse;
-
-      this.strip = {
-        left: mustache.strip.left,
-        right: close.strip.right
-      };
-
-      (program || inverse).strip.left = mustache.strip.right;
-      (inverse || program).strip.right = close.strip.left;
-
-      if (inverse && !program) {
-        this.isInverse = true;
-      }
-    },
-
-    ContentNode: function(string, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type = "content";
-      this.string = string;
-    },
-
-    HashNode: function(pairs, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type = "hash";
-      this.pairs = pairs;
-    },
-
-    IdNode: function(parts, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type = "ID";
-
-      var original = "",
-          dig = [],
-          depth = 0;
-
-      for(var i=0,l=parts.length; i<l; i++) {
-        var part = parts[i].part;
-        original += (parts[i].separator || '') + part;
-
-        if (part === ".." || part === "." || part === "this") {
-          if (dig.length > 0) {
-            throw new Exception("Invalid path: " + original, this);
-          } else if (part === "..") {
-            depth++;
-          } else {
-            this.isScoped = true;
-          }
-        } else {
-          dig.push(part);
-        }
-      }
-
-      this.original = original;
-      this.parts    = dig;
-      this.string   = dig.join('.');
-      this.depth    = depth;
-
-      // an ID is simple if it only has one part, and that part is not
-      // `..` or `this`.
-      this.isSimple = parts.length === 1 && !this.isScoped && depth === 0;
-
-      this.stringModeValue = this.string;
-    },
-
-    PartialNameNode: function(name, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type = "PARTIAL_NAME";
-      this.name = name.original;
-    },
-
-    DataNode: function(id, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type = "DATA";
-      this.id = id;
-    },
-
-    StringNode: function(string, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type = "STRING";
-      this.original =
-        this.string =
-        this.stringModeValue = string;
-    },
-
-    IntegerNode: function(integer, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type = "INTEGER";
-      this.original =
-        this.integer = integer;
-      this.stringModeValue = Number(integer);
-    },
-
-    BooleanNode: function(bool, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type = "BOOLEAN";
-      this.bool = bool;
-      this.stringModeValue = bool === "true";
-    },
-
-    CommentNode: function(comment, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type = "comment";
-      this.comment = comment;
-    }
-  };
-
-  // Must be exported as an object rather than the root of the module as the jison lexer
-  // most modify the object to operate properly.
-  __exports__ = AST;
-  return __exports__;
-})(__module5__);
-
-// handlebars/compiler/parser.js
-var __module9__ = (function() {
-  "use strict";
-  var __exports__;
-  /* jshint ignore:start */
-  /* Jison generated parser */
-  var handlebars = (function(){
-  var parser = {trace: function trace() { },
-  yy: {},
-  symbols_: {"error":2,"root":3,"statements":4,"EOF":5,"program":6,"simpleInverse":7,"statement":8,"openInverse":9,"closeBlock":10,"openBlock":11,"mustache":12,"partial":13,"CONTENT":14,"COMMENT":15,"OPEN_BLOCK":16,"sexpr":17,"CLOSE":18,"OPEN_INVERSE":19,"OPEN_ENDBLOCK":20,"path":21,"OPEN":22,"OPEN_UNESCAPED":23,"CLOSE_UNESCAPED":24,"OPEN_PARTIAL":25,"partialName":26,"partial_option0":27,"sexpr_repetition0":28,"sexpr_option0":29,"dataName":30,"param":31,"STRING":32,"INTEGER":33,"BOOLEAN":34,"OPEN_SEXPR":35,"CLOSE_SEXPR":36,"hash":37,"hash_repetition_plus0":38,"hashSegment":39,"ID":40,"EQUALS":41,"DATA":42,"pathSegments":43,"SEP":44,"$accept":0,"$end":1},
-  terminals_: {2:"error",5:"EOF",14:"CONTENT",15:"COMMENT",16:"OPEN_BLOCK",18:"CLOSE",19:"OPEN_INVERSE",20:"OPEN_ENDBLOCK",22:"OPEN",23:"OPEN_UNESCAPED",24:"CLOSE_UNESCAPED",25:"OPEN_PARTIAL",32:"STRING",33:"INTEGER",34:"BOOLEAN",35:"OPEN_SEXPR",36:"CLOSE_SEXPR",40:"ID",41:"EQUALS",42:"DATA",44:"SEP"},
-  productions_: [0,[3,2],[3,1],[6,2],[6,3],[6,2],[6,1],[6,1],[6,0],[4,1],[4,2],[8,3],[8,3],[8,1],[8,1],[8,1],[8,1],[11,3],[9,3],[10,3],[12,3],[12,3],[13,4],[7,2],[17,3],[17,1],[31,1],[31,1],[31,1],[31,1],[31,1],[31,3],[37,1],[39,3],[26,1],[26,1],[26,1],[30,2],[21,1],[43,3],[43,1],[27,0],[27,1],[28,0],[28,2],[29,0],[29,1],[38,1],[38,2]],
-  performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {
-
-  var $0 = $$.length - 1;
-  switch (yystate) {
-  case 1: return new yy.ProgramNode($$[$0-1], this._$);
-  break;
-  case 2: return new yy.ProgramNode([], this._$);
-  break;
-  case 3:this.$ = new yy.ProgramNode([], $$[$0-1], $$[$0], this._$);
-  break;
-  case 4:this.$ = new yy.ProgramNode($$[$0-2], $$[$0-1], $$[$0], this._$);
-  break;
-  case 5:this.$ = new yy.ProgramNode($$[$0-1], $$[$0], [], this._$);
-  break;
-  case 6:this.$ = new yy.ProgramNode($$[$0], this._$);
-  break;
-  case 7:this.$ = new yy.ProgramNode([], this._$);
-  break;
-  case 8:this.$ = new yy.ProgramNode([], this._$);
-  break;
-  case 9:this.$ = [$$[$0]];
-  break;
-  case 10: $$[$0-1].push($$[$0]); this.$ = $$[$0-1];
-  break;
-  case 11:this.$ = new yy.BlockNode($$[$0-2], $$[$0-1].inverse, $$[$0-1], $$[$0], this._$);
-  break;
-  case 12:this.$ = new yy.BlockNode($$[$0-2], $$[$0-1], $$[$0-1].inverse, $$[$0], this._$);
-  break;
-  case 13:this.$ = $$[$0];
-  break;
-  case 14:this.$ = $$[$0];
-  break;
-  case 15:this.$ = new yy.ContentNode($$[$0], this._$);
-  break;
-  case 16:this.$ = new yy.CommentNode($$[$0], this._$);
-  break;
-  case 17:this.$ = new yy.MustacheNode($$[$0-1], null, $$[$0-2], stripFlags($$[$0-2], $$[$0]), this._$);
-  break;
-  case 18:this.$ = new yy.MustacheNode($$[$0-1], null, $$[$0-2], stripFlags($$[$0-2], $$[$0]), this._$);
-  break;
-  case 19:this.$ = {path: $$[$0-1], strip: stripFlags($$[$0-2], $$[$0])};
-  break;
-  case 20:this.$ = new yy.MustacheNode($$[$0-1], null, $$[$0-2], stripFlags($$[$0-2], $$[$0]), this._$);
-  break;
-  case 21:this.$ = new yy.MustacheNode($$[$0-1], null, $$[$0-2], stripFlags($$[$0-2], $$[$0]), this._$);
-  break;
-  case 22:this.$ = new yy.PartialNode($$[$0-2], $$[$0-1], stripFlags($$[$0-3], $$[$0]), this._$);
-  break;
-  case 23:this.$ = stripFlags($$[$0-1], $$[$0]);
-  break;
-  case 24:this.$ = new yy.SexprNode([$$[$0-2]].concat($$[$0-1]), $$[$0], this._$);
-  break;
-  case 25:this.$ = new yy.SexprNode([$$[$0]], null, this._$);
-  break;
-  case 26:this.$ = $$[$0];
-  break;
-  case 27:this.$ = new yy.StringNode($$[$0], this._$);
-  break;
-  case 28:this.$ = new yy.IntegerNode($$[$0], this._$);
-  break;
-  case 29:this.$ = new yy.BooleanNode($$[$0], this._$);
-  break;
-  case 30:this.$ = $$[$0];
-  break;
-  case 31:$$[$0-1].isHelper = true; this.$ = $$[$0-1];
-  break;
-  case 32:this.$ = new yy.HashNode($$[$0], this._$);
-  break;
-  case 33:this.$ = [$$[$0-2], $$[$0]];
-  break;
-  case 34:this.$ = new yy.PartialNameNode($$[$0], this._$);
-  break;
-  case 35:this.$ = new yy.PartialNameNode(new yy.StringNode($$[$0], this._$), this._$);
-  break;
-  case 36:this.$ = new yy.PartialNameNode(new yy.IntegerNode($$[$0], this._$));
-  break;
-  case 37:this.$ = new yy.DataNode($$[$0], this._$);
-  break;
-  case 38:this.$ = new yy.IdNode($$[$0], this._$);
-  break;
-  case 39: $$[$0-2].push({part: $$[$0], separator: $$[$0-1]}); this.$ = $$[$0-2];
-  break;
-  case 40:this.$ = [{part: $$[$0]}];
-  break;
-  case 43:this.$ = [];
-  break;
-  case 44:$$[$0-1].push($$[$0]);
-  break;
-  case 47:this.$ = [$$[$0]];
-  break;
-  case 48:$$[$0-1].push($$[$0]);
-  break;
-  }
-  },
-  table: [{3:1,4:2,5:[1,3],8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],22:[1,13],23:[1,14],25:[1,15]},{1:[3]},{5:[1,16],8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],22:[1,13],23:[1,14],25:[1,15]},{1:[2,2]},{5:[2,9],14:[2,9],15:[2,9],16:[2,9],19:[2,9],20:[2,9],22:[2,9],23:[2,9],25:[2,9]},{4:20,6:18,7:19,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,21],20:[2,8],22:[1,13],23:[1,14],25:[1,15]},{4:20,6:22,7:19,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,21],20:[2,8],22:[1,13],23:[1,14],25:[1,15]},{5:[2,13],14:[2,13],15:[2,13],16:[2,13],19:[2,13],20:[2,13],22:[2,13],23:[2,13],25:[2,13]},{5:[2,14],14:[2,14],15:[2,14],16:[2,14],19:[2,14],20:[2,14],22:[2,14],23:[2,14],25:[2,14]},{5:[2,15],14:[2,15],15:[2,15],16:[2,15],19:[2,15],20:[2,15],22:[2,15],23:[2,15],25:[2,15]},{5:[2,16],14:[2,16],15:[2,16],16:[2,16],19:[2,16],20:[2,16],22:[2,16],23:[2,16],25:[2,16]},{17:23,21:24,30:25,40:[1,28],42:[1,27],43:26},{17:29,21:24,30:25,40:[1,28
 ],42:[1,27],43:26},{17:30,21:24,30:25,40:[1,28],42:[1,27],43:26},{17:31,21:24,30:25,40:[1,28],42:[1,27],43:26},{21:33,26:32,32:[1,34],33:[1,35],40:[1,28],43:26},{1:[2,1]},{5:[2,10],14:[2,10],15:[2,10],16:[2,10],19:[2,10],20:[2,10],22:[2,10],23:[2,10],25:[2,10]},{10:36,20:[1,37]},{4:38,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,7],22:[1,13],23:[1,14],25:[1,15]},{7:39,8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,21],20:[2,6],22:[1,13],23:[1,14],25:[1,15]},{17:23,18:[1,40],21:24,30:25,40:[1,28],42:[1,27],43:26},{10:41,20:[1,37]},{18:[1,42]},{18:[2,43],24:[2,43],28:43,32:[2,43],33:[2,43],34:[2,43],35:[2,43],36:[2,43],40:[2,43],42:[2,43]},{18:[2,25],24:[2,25],36:[2,25]},{18:[2,38],24:[2,38],32:[2,38],33:[2,38],34:[2,38],35:[2,38],36:[2,38],40:[2,38],42:[2,38],44:[1,44]},{21:45,40:[1,28],43:26},{18:[2,40],24:[2,40],32:[2,40],33:[2,40],34:[2,40],35:[2,40],36:[2,40],40:[2,40],42:[2,40],44:[2,40]},{18:[1,46]},{18:[1,47]},{24:[1,48]},{18:[2,41],21:50,27:
 49,40:[1,28],43:26},{18:[2,34],40:[2,34]},{18:[2,35],40:[2,35]},{18:[2,36],40:[2,36]},{5:[2,11],14:[2,11],15:[2,11],16:[2,11],19:[2,11],20:[2,11],22:[2,11],23:[2,11],25:[2,11]},{21:51,40:[1,28],43:26},{8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,3],22:[1,13],23:[1,14],25:[1,15]},{4:52,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,5],22:[1,13],23:[1,14],25:[1,15]},{14:[2,23],15:[2,23],16:[2,23],19:[2,23],20:[2,23],22:[2,23],23:[2,23],25:[2,23]},{5:[2,12],14:[2,12],15:[2,12],16:[2,12],19:[2,12],20:[2,12],22:[2,12],23:[2,12],25:[2,12]},{14:[2,18],15:[2,18],16:[2,18],19:[2,18],20:[2,18],22:[2,18],23:[2,18],25:[2,18]},{18:[2,45],21:56,24:[2,45],29:53,30:60,31:54,32:[1,57],33:[1,58],34:[1,59],35:[1,61],36:[2,45],37:55,38:62,39:63,40:[1,64],42:[1,27],43:26},{40:[1,65]},{18:[2,37],24:[2,37],32:[2,37],33:[2,37],34:[2,37],35:[2,37],36:[2,37],40:[2,37],42:[2,37]},{14:[2,17],15:[2,17],16:[2,17],19:[2,17],20:[2,17],22:[2,17],23:[2,17],25:[2,17]},{5:
 [2,20],14:[2,20],15:[2,20],16:[2,20],19:[2,20],20:[2,20],22:[2,20],23:[2,20],25:[2,20]},{5:[2,21],14:[2,21],15:[2,21],16:[2,21],19:[2,21],20:[2,21],22:[2,21],23:[2,21],25:[2,21]},{18:[1,66]},{18:[2,42]},{18:[1,67]},{8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,4],22:[1,13],23:[1,14],25:[1,15]},{18:[2,24],24:[2,24],36:[2,24]},{18:[2,44],24:[2,44],32:[2,44],33:[2,44],34:[2,44],35:[2,44],36:[2,44],40:[2,44],42:[2,44]},{18:[2,46],24:[2,46],36:[2,46]},{18:[2,26],24:[2,26],32:[2,26],33:[2,26],34:[2,26],35:[2,26],36:[2,26],40:[2,26],42:[2,26]},{18:[2,27],24:[2,27],32:[2,27],33:[2,27],34:[2,27],35:[2,27],36:[2,27],40:[2,27],42:[2,27]},{18:[2,28],24:[2,28],32:[2,28],33:[2,28],34:[2,28],35:[2,28],36:[2,28],40:[2,28],42:[2,28]},{18:[2,29],24:[2,29],32:[2,29],33:[2,29],34:[2,29],35:[2,29],36:[2,29],40:[2,29],42:[2,29]},{18:[2,30],24:[2,30],32:[2,30],33:[2,30],34:[2,30],35:[2,30],36:[2,30],40:[2,30],42:[2,30]},{17:68,21:24,30:25,40:[1,28],42:[1,27],43:26},{18:[2,32],24:[2
 ,32],36:[2,32],39:69,40:[1,70]},{18:[2,47],24:[2,47],36:[2,47],40:[2,47]},{18:[2,40],24:[2,40],32:[2,40],33:[2,40],34:[2,40],35:[2,40],36:[2,40],40:[2,40],41:[1,71],42:[2,40],44:[2,40]},{18:[2,39],24:[2,39],32:[2,39],33:[2,39],34:[2,39],35:[2,39],36:[2,39],40:[2,39],42:[2,39],44:[2,39]},{5:[2,22],14:[2,22],15:[2,22],16:[2,22],19:[2,22],20:[2,22],22:[2,22],23:[2,22],25:[2,22]},{5:[2,19],14:[2,19],15:[2,19],16:[2,19],19:[2,19],20:[2,19],22:[2,19],23:[2,19],25:[2,19]},{36:[1,72]},{18:[2,48],24:[2,48],36:[2,48],40:[2,48]},{41:[1,71]},{21:56,30:60,31:73,32:[1,57],33:[1,58],34:[1,59],35:[1,61],40:[1,28],42:[1,27],43:26},{18:[2,31],24:[2,31],32:[2,31],33:[2,31],34:[2,31],35:[2,31],36:[2,31],40:[2,31],42:[2,31]},{18:[2,33],24:[2,33],36:[2,33],40:[2,33]}],
-  defaultActions: {3:[2,2],16:[2,1],50:[2,42]},
-  parseError: function parseError(str, hash) {
-      throw new Error(str);
-  },
-  parse: function parse(input) {
-      var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
-      this.lexer.setInput(input);
-      this.lexer.yy = this.yy;
-      this.yy.lexer = this.lexer;
-      this.yy.parser = this;
-      if (typeof this.lexer.yylloc == "undefined")
-          this.lexer.yylloc = {};
-      var yyloc = this.lexer.yylloc;
-      lstack.push(yyloc);
-      var ranges = this.lexer.options && this.lexer.options.ranges;
-      if (typeof this.yy.parseError === "function")
-          this.parseError = this.yy.parseError;
-      function popStack(n) {
-          stack.length = stack.length - 2 * n;
-          vstack.length = vstack.length - n;
-          lstack.length = lstack.length - n;
-      }
-      function lex() {
-          var token;
-          token = self.lexer.lex() || 1;
-          if (typeof token !== "number") {
-              token = self.symbols_[token] || token;
-          }
-          return token;
-      }
-      var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;
-      while (true) {
-          state = stack[stack.length - 1];
-          if (this.defaultActions[state]) {
-              action = this.defaultActions[state];
-          } else {
-              if (symbol === null || typeof symbol == "undefined") {
-                  symbol = lex();
-              }
-              action = table[state] && table[state][symbol];
-          }
-          if (typeof action === "undefined" || !action.length || !action[0]) {
-              var errStr = "";
-              if (!recovering) {
-                  expected = [];
-                  for (p in table[state])
-                      if (this.terminals_[p] && p > 2) {
-                          expected.push("'" + this.terminals_[p] + "'");
-                      }
-                  if (this.lexer.showPosition) {
-                      errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
-                  } else {
-                      errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1?"end of input":"'" + (this.terminals_[symbol] || symbol) + "'");
-                  }
-                  this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});
-              }
-          }
-          if (action[0] instanceof Array && action.length > 1) {
-              throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
-          }
-          switch (action[0]) {
-          case 1:
-              stack.push(symbol);
-              vstack.push(this.lexer.yytext);
-              lstack.push(this.lexer.yylloc);
-              stack.push(action[1]);
-              symbol = null;
-              if (!preErrorSymbol) {
-                  yyleng = this.lexer.yyleng;
-                  yytext = this.lexer.yytext;
-                  yylineno = this.lexer.yylineno;
-                  yyloc = this.lexer.yylloc;
-                  if (recovering > 0)
-                      recovering--;
-              } else {
-                  symbol = preErrorSymbol;
-                  preErrorSymbol = null;
-              }
-              break;
-          case 2:
-              len = this.productions_[action[1]][1];
-              yyval.$ = vstack[vstack.length - len];
-              yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column};
-              if (ranges) {
-                  yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];
-              }
-              r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
-              if (typeof r !== "undefined") {
-                  return r;
-              }
-              if (len) {
-                  stack = stack.slice(0, -1 * len * 2);
-                  vstack = vstack.slice(0, -1 * len);
-                  lstack = lstack.slice(0, -1 * len);
-              }
-              stack.push(this.productions_[action[1]][0]);
-              vstack.push(yyval.$);
-              lstack.push(yyval._$);
-              newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
-              stack.push(newState);
-              break;
-          case 3:
-              return true;
-          }
-      }
-      return true;
-  }
-  };
-
-
-  function stripFlags(open, close) {
-    return {
-      left: open.charAt(2) === '~',
-      right: close.charAt(0) === '~' || close.charAt(1) === '~'
-    };
-  }
-
-  /* Jison generated lexer */
-  var lexer = (function(){
-  var lexer = ({EOF:1,
-  parseError:function parseError(str, hash) {
-          if (this.yy.parser) {
-              this.yy.parser.parseError(str, hash);
-          } else {
-              throw new Error(str);
-          }
-      },
-  setInput:function (input) {
-          this._input = input;
-          this._more = this._less = this.done = false;
-          this.yylineno = this.yyleng = 0;
-          this.yytext = this.matched = this.match = '';
-          this.conditionStack = ['INITIAL'];
-          this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};
-          if (this.options.ranges) this.yylloc.range = [0,0];
-          this.offset = 0;
-          return this;
-      },
-  input:function () {
-          var ch = this._input[0];
-          this.yytext += ch;
-          this.yyleng++;
-          this.offset++;
-          this.match += ch;
-          this.matched += ch;
-          var lines = ch.match(/(?:\r\n?|\n).*/g);
-          if (lines) {
-              this.yylineno++;
-              this.yylloc.last_line++;
-          } else {
-              this.yylloc.last_column++;
-          }
-          if (this.options.ranges) this.yylloc.range[1]++;
-
-          this._input = this._input.slice(1);
-          return ch;
-      },
-  unput:function (ch) {
-          var len = ch.length;
-          var lines = ch.split(/(?:\r\n?|\n)/g);
-
-          this._input = ch + this._input;
-          this.yytext = this.yytext.substr(0, this.yytext.length-len-1);
-          //this.yyleng -= len;
-          this.offset -= len;
-          var oldLines = this.match.split(/(?:\r\n?|\n)/g);
-          this.match = this.match.substr(0, this.match.length-1);
-          this.matched = this.matched.substr(0, this.matched.length-1);
-
-          if (lines.length-1) this.yylineno -= lines.length-1;
-          var r = this.yylloc.range;
-
-          this.yylloc = {first_line: this.yylloc.first_line,
-            last_line: this.yylineno+1,
-            first_column: this.yylloc.first_column,
-            last_column: lines ?
-                (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length:
-                this.yylloc.first_column - len
-            };
-
-          if (this.options.ranges) {
-              this.yylloc.range = [r[0], r[0] + this.yyleng - len];
-          }
-          return this;
-      },
-  more:function () {
-          this._more = true;
-          return this;
-      },
-  less:function (n) {
-          this.unput(this.match.slice(n));
-      },
-  pastInput:function () {
-          var past = this.matched.substr(0, this.matched.length - this.match.length);
-          return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, "");
-      },
-  upcomingInput:function () {
-          var next = this.match;
-          if (next.length < 20) {
-              next += this._input.substr(0, 20-next.length);
-          }
-          return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\n/g, "");
-      },
-  showPosition:function () {
-          var pre = this.pastInput();
-          var c = new Array(pre.length + 1).join("-");
-          return pre + this.upcomingInput() + "\n" + c+"^";
-      },
-  next:function () {
-          if (this.done) {
-              return this.EOF;
-          }
-          if (!this._input) this.done = true;
-
-          var token,
-              match,
-              tempMatch,
-              index,
-              col,
-              lines;
-          if (!this._more) {
-              this.yytext = '';
-              this.match = '';
-          }
-          var rules = this._currentRules();
-          for (var i=0;i < rules.length; i++) {
-              tempMatch = this._input.match(this.rules[rules[i]]);
-              if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
-                  match = tempMatch;
-                  index = i;
-                  if (!this.options.flex) break;
-              }
-          }
-          if (match) {
-              lines = match[0].match(/(?:\r\n?|\n).*/g);
-              if (lines) this.yylineno += lines.length;
-              this.yylloc = {first_line: this.yylloc.last_line,
-                             last_line: this.yylineno+1,
-                             first_column: this.yylloc.last_column,
-                             last_column: lines ? lines[lines.length-1].length-lines[lines.length-1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length};
-              this.yytext += match[0];
-              this.match += match[0];
-              this.matches = match;
-              this.yyleng = this.yytext.length;
-              if (this.options.ranges) {
-                  this.yylloc.range = [this.offset, this.offset += this.yyleng];
-              }
-              this._more = false;
-              this._input = this._input.slice(match[0].length);
-              this.matched += match[0];
-              token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);
-              if (this.done && this._input) this.done = false;
-              if (token) return token;
-              else return;
-          }
-          if (this._input === "") {
-              return this.EOF;
-          } else {
-              return this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\n'+this.showPosition(),
-                      {text: "", token: null, line: this.yylineno});
-          }
-      },
-  lex:function lex() {
-          var r = this.next();
-          if (typeof r !== 'undefined') {
-              return r;
-          } else {
-              return this.lex();
-          }
-      },
-  begin:function begin(condition) {
-          this.conditionStack.push(condition);
-      },
-  popState:function popState() {
-          return this.conditionStack.pop();
-      },
-  _currentRules:function _currentRules() {
-          return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;
-      },
-  topState:function () {
-          return this.conditionStack[this.conditionStack.length-2];
-      },
-  pushState:function begin(condition) {
-          this.begin(condition);
-      }});
-  lexer.options = {};
-  lexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {
-
-
-  function strip(start, end) {
-    return yy_.yytext = yy_.yytext.substr(start, yy_.yyleng-end);
-  }
-
-
-  var YYSTATE=YY_START
-  switch($avoiding_name_collisions) {
-  case 0:
-                                     if(yy_.yytext.slice(-2) === "\\\\") {
-                                       strip(0,1);
-                                       this.begin("mu");
-                                     } else if(yy_.yytext.slice(-1) === "\\") {
-                                       strip(0,1);
-                                       this.begin("emu");
-                                     } else {
-                                       this.begin("mu");
-                                     }
-                                     if(yy_.yytext) return 14;
-
-  break;
-  case 1:return 14;
-  break;
-  case 2:
-                                     this.popState();
-                                     return 14;
-
-  break;
-  case 3:strip(0,4); this.popState(); return 15;
-  break;
-  case 4:return 35;
-  break;
-  case 5:return 36;
-  break;
-  case 6:return 25;
-  break;
-  case 7:return 16;
-  break;
-  case 8:return 20;
-  break;
-  case 9:return 19;
-  break;
-  case 10:return 19;
-  break;
-  case 11:return 23;
-  break;
-  case 12:return 22;
-  break;
-  case 13:this.popState(); this.begin('com');
-  break;
-  case 14:strip(3,5); this.popState(); return 15;
-  break;
-  case 15:return 22;
-  break;
-  case 16:return 41;
-  break;
-  case 17:return 40;
-  break;
-  case 18:return 40;
-  break;
-  case 19:return 44;
-  break;
-  case 20:// ignore whitespace
-  break;
-  case 21:this.popState(); return 24;
-  break;
-  case 22:this.popState(); return 18;
-  break;
-  case 23:yy_.yytext = strip(1,2).replace(/\\"/g,'"'); return 32;
-  break;
-  case 24:yy_.yytext = strip(1,2).replace(/\\'/g,"'"); return 32;
-  break;
-  case 25:return 42;
-  break;
-  case 26:return 34;
-  break;
-  case 27:return 34;
-  break;
-  case 28:return 33;
-  break;
-  case 29:return 40;
-  break;
-  case 30:yy_.yytext = strip(1,2); return 40;
-  break;
-  case 31:return 'INVALID';
-  break;
-  case 32:return 5;
-  break;
-  }
-  };
-  lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:[\s\S]*?--\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{!--)/,/^(?:\{\{![\s\S]*?\}\})/,/^(?:\{\{(~)?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:-?[0-9]+(?=([~}\s)])))/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)]))))/,/^(?:\[[^\]]*\])/,/^(?:.)/,/^(?:$)/];
-  lexer.conditions = {"mu":{"rules":[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],"inclusive":false},"emu":{"rules":[2],"inclusive":false},"com":{"rules":[3],"inclusive":false},"INITIAL":{"rules":[0,1,32],"inclusive":true}};
-  return lexer;})()
-  parser.lexer = lexer;
-  function Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser;
-  return new Parser;
-  })();__exports__ = handlebars;
-  /* jshint ignore:end */
-  return __exports__;
-})();
-
-// handlebars/compiler/base.js
-var __module8__ = (function(__dependency1__, __dependency2__) {
-  "use strict";
-  var __exports__ = {};
-  var parser = __dependency1__;
-  var AST = __dependency2__;
-
-  __exports__.parser = parser;
-
-  function parse(input) {
-    // Just return if an already-compile AST was passed in.
-    if(input.constructor === AST.ProgramNode) { return input; }
-
-    parser.yy = AST;
-    return parser.parse(input);
-  }
-
-  __exports__.parse = parse;
-  return __exports__;
-})(__module9__, __module7__);
-
-// handlebars/compiler/compiler.js
-var __module10__ = (function(__dependency1__) {
-  "use strict";
-  var __exports__ = {};
-  var Exception = __dependency1__;
-
-  function Compiler() {}
-
-  __exports__.Compiler = Compiler;// the foundHelper register will disambiguate helper lookup from finding a
-  // function in a context. This is necessary for mustache compatibility, which
-  // requires that context functions in blocks are evaluated by blockHelperMissing,
-  // and then proceed as if the resulting value was provided to blockHelperMissing.
-
-  Compiler.prototype = {
-    compiler: Compiler,
-
-    disassemble: function() {
-      var opcodes = this.opcodes, opcode, out = [], params, param;
-
-      for (var i=0, l=opcodes.length; i<l; i++) {
-        opcode = opcodes[i];
-
-        if (opcode.opcode === 'DECLARE') {
-          out.push("DECLARE " + opcode.name + "=" + opcode.value);
-        } else {
-          params = [];
-          for (var j=0; j<opcode.args.length; j++) {
-            param = opcode.args[j];
-            if (typeof param === "string") {
-              param = "\"" + param.replace("\n", "\\n") + "\"";
-            }
-            params.push(param);
-          }
-          out.push(opcode.opcode + " " + params.join(" "));
-        }
-      }
-
-      return out.join("\n");
-    },
-
-    equals: function(other) {
-      var len = this.opcodes.length;
-      if (other.opcodes.length !== len) {
-        return false;
-      }
-
-      for (var i = 0; i < len; i++) {
-        var opcode = this.opcodes[i],
-            otherOpcode = other.opcodes[i];
-        if (opcode.opcode !== otherOpcode.opcode || opcode.args.length !== otherOpcode.args.length) {
-          return false;
-        }
-        for (var j = 0; j < opcode.args.length; j++) {
-          if (opcode.args[j] !== otherOpcode.args[j]) {
-            return false;
-          }
-        }
-      }
-
-      len = this.children.length;
-      if (other.children.length !== len) {
-        return false;
-      }
-      for (i = 0; i < len; i++) {
-        if (!this.children[i].equals(other.children[i])) {
-          return false;
-        }
-      }
-
-      return true;
-    },
-
-    guid: 0,
-
-    compile: function(program, options) {
-      this.opcodes = [];
-      this.children = [];
-      this.depths = {list: []};
-      this.options = options;
-
-      // These changes will propagate to the other compiler components
-      var knownHelpers = this.options.knownHelpers;
-      this.options.knownHelpers = {
-        'helperMissing': true,
-        'blockHelperMissing': true,
-        'each': true,
-        'if': true,
-        'unless': true,
-        'with': true,
-        'log': true
-      };
-      if (knownHelpers) {
-        for (var name in knownHelpers) {
-          this.options.knownHelpers[name] = knownHelpers[name];
-        }
-      }
-
-      return this.accept(program);
-    },
-
-    accept: function(node) {
-      var strip = node.strip || {},
-          ret;
-      if (strip.left) {
-        this.opcode('strip');
-      }
-
-      ret = this[node.type](node);
-
-      if (strip.right) {
-        this.opcode('strip');
-      }
-
-      return ret;
-    },
-
-    program: function(program) {
-      var statements = program.statements;
-
-      for(var i=0, l=statements.length; i<l; i++) {
-        this.accept(statements[i]);
-      }
-      this.isSimple = l === 1;
-
-      this.depths.list = this.depths.list.sort(function(a, b) {
-        return a - b;
-      });
-
-      return this;
-    },
-
-    compileProgram: function(program) {
-      var result = new this.compiler().compile(program, this.options);
-      var guid = this.guid++, depth;
-
-      this.usePartial = this.usePartial || result.usePartial;
-
-      this.children[guid] = result;
-
-      for(var i=0, l=result.depths.list.length; i<l; i++) {
-        depth = result.depths.list[i];
-
-        if(depth < 2) { continue; }
-        else { this.addDepth(depth - 1); }
-      }
-
-      return guid;
-    },
-
-    block: function(block) {
-      var mustache = block.mustache,
-          program = block.program,
-          inverse = block.inverse;
-
-      if (program) {
-        program = this.compileProgram(program);
-      }
-
-      if (inverse) {
-        inverse = this.compileProgram(inverse);
-      }
-
-      var sexpr = mustache.sexpr;
-      var type = this.classifySexpr(sexpr);
-
-      if (type === "helper") {
-        this.helperSexpr(sexpr, program, inverse);
-      } else if (type === "simple") {
-        this.simpleSexpr(sexpr);
-
-        // now that the simple mustache is resolved, we need to
-        // evaluate it by executing `blockHelperMissing`
-        this.opcode('pushProgram', program);
-        this.opcode('pushProgram', inverse);
-        this.opcode('emptyHash');
-        this.opcode('blockValue');
-      } else {
-        this.ambiguousSexpr(sexpr, program, inverse);
-
-        // now that the simple mustache is resolved, we need to
-        // evaluate it by executing `blockHelperMissing`
-        this.opcode('pushProgram', program);
-        this.opcode('pushProgram', inverse);
-        this.opcode('emptyHash');
-        this.opcode('ambiguousBlockValue');
-      }
-
-      this.opcode('append');
-    },
-
-    hash: function(hash) {
-      var pairs = hash.pairs, pair, val;
-
-      this.opcode('pushHash');
-
-      for(var i=0, l=pairs.length; i<l; i++) {
-        pair = pairs[i];
-        val  = pair[1];
-
-        if (this.options.stringParams) {
-          if(val.depth) {
-            this.addDepth(val.depth);
-          }
-          this.opcode('getContext', val.depth || 0);
-          this.opcode('pushStringParam', val.stringModeValue, val.type);
-
-          if (val.type === 'sexpr') {
-            // Subexpressions get evaluated and passed in
-            // in string params mode.
-            this.sexpr(val);
-          }
-        } else {
-          this.accept(val);
-        }
-
-        this.opcode('assignToHash', pair[0]);
-      }
-      this.opcode('popHash');
-    },
-
-    partial: function(partial) {
-      var partialName = partial.partialName;
-      this.usePartial = true;
-
-      if(partial.context) {
-        this.ID(partial.context);
-      } else {
-        this.opcode('push', 'depth0');
-      }
-
-      this.opcode('invokePartial', partialName.name);
-      this.opcode('append');
-    },
-
-    content: function(content) {
-      this.opcode('appendContent', content.string);
-    },
-
-    mustache: function(mustache) {
-      this.sexpr(mustache.sexpr);
-
-      if(mustache.escaped && !this.options.noEscape) {
-        this.opcode('appendEscaped');
-      } else {
-        this.opcode('append');
-      }
-    },
-
-    ambiguousSexpr: function(sexpr, program, inverse) {
-      var id = sexpr.id,
-          name = id.parts[0],
-          isBlock = program != null || inverse != null;
-
-      this.opcode('getContext', id.depth);
-
-      this.opcode('pushProgram', program);
-      this.opcode('pushProgram', inverse);
-
-      this.opcode('invokeAmbiguous', name, isBlock);
-    },
-
-    simpleSexpr: function(sexpr) {
-      var id = sexpr.id;
-
-      if (id.type === 'DATA') {
-        this.DATA(id);
-      } else if (id.parts.length) {
-        this.ID(id);
-      } else {
-        // Simplified ID for `this`
-        this.addDepth(id.depth);
-        this.opcode('getContext', id.depth);
-        this.opcode('pushContext');
-      }
-
-      this.opcode('resolvePossibleLambda');
-    },
-
-    helperSexpr: function(sexpr, program, inverse) {
-      var params = this.setupFullMustacheParams(sexpr, program, inverse),
-          name = sexpr.id.parts[0];
-
-      if (this.options.knownHelpers[name]) {
-        this.opcode('invokeKnownHelper', params.length, name);
-      } else if (this.options.knownHelpersOnly) {
-        throw new Exception("You specified knownHelpersOnly, but used the unknown helper " + name, sexpr);
-      } else {
-        this.opcode('invokeHelper', params.length, name, sexpr.isRoot);
-      }
-    },
-
-    sexpr: function(sexpr) {
-      var type = this.classifySexpr(sexpr);
-
-      if (type === "simple") {
-        this.simpleSexpr(sexpr);
-      } else if (type === "helper") {
-        this.helperSexpr(sexpr);
-      } else {
-        this.ambiguousSexpr(sexpr);
-      }
-    },
-
-    ID: function(id) {
-      this.addDepth(id.depth);
-      this.opcode('getContext', id.depth);
-
-      var name = id.parts[0];
-      if (!name) {
-        this.opcode('pushContext');
-      } else {
-        this.opcode('lookupOnContext', id.parts[0]);
-      }
-
-      for(var i=1, l=id.parts.length; i<l; i++) {
-        this.opcode('lookup', id.parts[i]);
-      }
-    },
-
-    DATA: function(data) {
-      this.options.data = true;
-      if (data.id.isScoped || data.id.depth) {
-        throw new Exception('Scoped data references are not supported: ' + data.original, data);
-      }
-
-      this.opcode('lookupData');
-      var parts = data.id.parts;
-      for(var i=0, l=parts.length; i<l; i++) {
-        this.opcode('lookup', parts[i]);
-      }
-    },
-
-    STRING: function(string) {
-      this.opcode('pushString', string.string);
-    },
-
-    INTEGER: function(integer) {
-      this.opcode('pushLiteral', integer.integer);
-    },
-
-    BOOLEAN: function(bool) {
-      this.opcode('pushLiteral', bool.bool);
-    },
-
-    comment: function() {},
-
-    // HELPERS
-    opcode: function(name) {
-      this.opcodes.push({ opcode: name, args: [].slice.call(arguments, 1) });
-    },
-
-    declare: function(name, value) {
-      this.opcodes.push({ opcode: 'DECLARE', name: name, value: value });
-    },
-
-    addDepth: function(depth) {
-      if(depth === 0) { return; }
-
-      if(!this.depths[depth]) {
-        this.depths[depth] = true;
-        this.depths.list.push(depth);
-      }
-    },
-
-    classifySexpr: function(sexpr) {
-      var isHelper   = sexpr.isHelper;
-      var isEligible = sexpr.eligibleHelper;
-      var options    = this.options;
-
-      // if ambiguous, we can possibly resolve the ambiguity now
-      if (isEligible && !isHelper) {
-        var name = sexpr.id.parts[0];
-
-        if (options.knownHelpers[name]) {
-          isHelper = true;
-        } else if (options.knownHelpersOnly) {
-          isEligible = false;
-        }
-      }
-
-      if (isHelper) { return "helper"; }
-      else if (isEligible) { return "ambiguous"; }
-      else { return "simple"; }
-    },
-
-    pushParams: function(params) {
-      var i = params.length, param;
-
-      while(i--) {
-        param = params[i];
-
-        if(this.options.stringParams) {
-          if(param.depth) {
-            this.addDepth(param.depth);
-          }
-
-          this.opcode('getContext', param.depth || 0);
-          this.opcode('pushStringParam', param.stringModeValue, param.type);
-
-          if (param.type === 'sexpr') {
-            // Subexpressions get evaluated and passed in
-            // in string params mode.
-            this.sexpr(param);
-          }
-        } else {
-          this[param.type](param);
-        }
-      }
-    },
-
-    setupFullMustacheParams: function(sexpr, program, inverse) {
-      var params = sexpr.params;
-      this.pushParams(params);
-
-      this.opcode('pushProgram', program);
-      this.opcode('pushProgram', inverse);
-
-      if (sexpr.hash) {
-        this.hash(sexpr.hash);
-      } else {
-        this.opcode('emptyHash');
-      }
-
-      return params;
-    }
-  };
-
-  function precompile(input, options, env) {
-    if (input == null || (typeof input !== 'string' && input.constructor !== env.AST.ProgramNode)) {
-      throw new Exception("You must pass a string or Handlebars AST to Handlebars.precompile. You passed " + input);
-    }
-
-    options = options || {};
-    if (!('data' in options)) {
-      options.data = true;
-    }
-
-    var ast = env.parse(input);
-    var environment = new env.Compiler().compile(ast, options);
-    return new env.JavaScriptCompiler().compile(environment, options);
-  }
-
-  __exports__.precompile = precompile;function compile(input, options, env) {
-    if (input == null || (typeof input !== 'string' && input.constructor !== env.AST.ProgramNode)) {
-      throw new Exception("You must pass a string or Handlebars AST to Handlebars.compile. You passed " + input);
-    }
-
-    options = options || {};
-
-    if (!('data' in options)) {
-      options.data = true;
-    }
-
-    var compiled;
-
-    function compileInput() {
-      var ast = env.parse(input);
-      var environment = new env.Compiler().compile(ast, options);
-      var templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true);
-      return env.template(templateSpec);
-    }
-
-    // Template is only compiled on first use and cached after that point.
-    return function(context, options) {
-      if (!compiled) {
-        compiled = compileInput();
-      }
-      return compiled.call(this, context, options);
-    };
-  }
-
-  __exports__.compile = compile;
-  return __exports__;
-})(__module5__);
-
-// handlebars/compiler/javascript-compiler.js
-var __module11__ = (function(__dependency1__, __dependency2__) {
-  "use strict";
-  var __exports__;
-  var COMPILER_REVISION = __dependency1__.COMPILER_REVISION;
-  var REVISION_CHANGES = __dependency1__.REVISION_CHANGES;
-  var log = __dependency1__.log;
-  var Exception = __dependency2__;
-
-  function Literal(value) {
-    this.value = value;
-  }
-
-  function JavaScriptCompiler() {}
-
-  JavaScriptCompiler.prototype = {
-    // PUBLIC API: You can override these methods in a subclass to provide
-    // alternative compiled forms for name lookup and buffering semantics
-    nameLookup: function(parent, name /* , type*/) {
-      var wrap,
-          ret;
-      if (parent.indexOf('depth') === 0) {
-        wrap = true;
-      }
-
-      if (/^[0-9]+$/.test(name)) {
-        ret = parent + "[" + name + "]";
-      } else if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) {
-        ret = parent + "." + name;
-      }
-      else {
-        ret = parent + "['" + name + "']";
-      }
-
-      if (wrap) {
-        return '(' + parent + ' && ' + ret + ')';
-      } else {
-        return ret;
-      }
-    },
-
-    compilerInfo: function() {
-      var revision = COMPILER_REVISION,
-          versions = REVISION_CHANGES[revision];
-      return "this.compilerInfo = ["+revision+",'"+versions+"'];\n";
-    },
-
-    appendToBuffer: function(string) {
-      if (this.environment.isSimple) {
-        return "return " + string + ";";
-      } else {
-        return {
-          appendToBuffer: true,
-          content: string,
-          toString: function() { return "buffer += " + string + ";"; }
-        };
-      }
-    },
-
-    initializeBuffer: function() {
-      return this.quotedString("");
-    },
-
-    namespace: "Handlebars",
-    // END PUBLIC API
-
-    compile: function(environment, options, context, asObject) {
-      this.environment = environment;
-      this.options = options || {};
-
-      log('debug', this.environment.disassemble() + "\n\n");
-
-      this.name = this.environment.name;
-      this.isChild = !!context;
-      this.context = context || {
-        programs: [],
-        environments: [],
-        aliases: { }
-      };
-
-      this.preamble();
-
-      this.stackSlot = 0;
-      this.stackVars = [];
-      this.registers = { list: [] };
-      this.hashes = [];
-      this.compileStack = [];
-      this.inlineStack = [];
-
-      this.compileChildren(environment, options);
-
-      var opcodes = environment.opcodes, opcode;
-
-      this.i = 0;
-
-      for(var l=opcodes.length; this.i<l; this.i++) {
-        opcode = opcodes[this.i];
-
-        if(opcode.opcode === 'DECLARE') {
-          this[opcode.name] = opcode.value;
-        } else {
-          this[opcode.opcode].apply(this, opcode.args);
-        }
-
-        // Reset the stripNext flag if it was not set by this operation.
-        if (opcode.opcode !== this.stripNext) {
-          this.stripNext = false;
-        }
-      }
-
-      // Flush any trailing content that might be pending.
-      this.pushSource('');
-
-      if (this.stackSlot || this.inlineStack.length || this.compileStack.length) {
-        throw new Exception('Compile completed with content left on stack');
-      }
-
-      return this.createFunctionContext(asObject);
-    },
-
-    preamble: function() {
-      var out = [];
-
-      if (!this.isChild) {
-        var namespace = this.namespace;
-
-        var copies = "helpers = this.merge(helpers, " + namespace + ".helpers);";
-        if (this.environment.usePartial) { copies = copies + " partials = this.merge(partials, " + namespace + ".partials);"; }
-        if (this.options.data) { copies = copies + " data = data || {};"; }
-        out.push(copies);
-      } else {
-        out.push('');
-      }
-
-      if (!this.environment.isSimple) {
-        out.push(", buffer = " + this.initializeBuffer());
-      } else {
-        out.push("");
-      }
-
-      // track the last context pushed into place to allow skipping the
-      // getContext opcode when it would be a noop
-      this.lastContext = 0;
-      this.source = out;
-    },
-
-    createFunctionContext: function(asObject) {
-      var locals = this.stackVars.concat(this.registers.list);
-
-      if(locals.length > 0) {
-        this.source[1] = this.source[1] + ", " + locals.join(", ");
-      }
-
-      // Generate minimizer alias mappings
-      if (!this.isChild) {
-        for (var alias in this.context.aliases) {
-          if (this.context.aliases.hasOwnProperty(alias)) {
-            this.source[1] = this.source[1] + ', ' + alias + '=' + this.context.aliases[alias];
-          }
-        }
-      }
-
-      if (this.source[1]) {
-        this.source[1] = "var " + this.source[1].substring(2) + ";";
-      }
-
-      // Merge children
-      if (!this.isChild) {
-        this.source[1] += '\n' + this.context.programs.join('\n') + '\n';
-      }
-
-      if (!this.environment.isSimple) {
-        this.pushSource("return buffer;");
-      }
-
-      var params = this.isChild ? ["depth0", "data"] : ["Handlebars", "depth0", "helpers", "partials", "data"];
-
-      for(var i=0, l=this.environment.depths.list.length; i<l; i++) {
-        params.push("depth" + this.environment.depths.list[i]);
-      }
-
-      // Perform a second pass over the output to merge content when possible
-      var source = this.mergeSource();
-
-      if (!this.isChild) {
-        source = this.compilerInfo()+source;
-      }
-
-      if (asObject) {
-        params.push(source);
-
-        return Function.apply(this, params);
-      } else {
-        var functionSource = 'function ' + (this.name || '') + '(' + params.join(',') + ') {\n  ' + source + '}';
-        log('debug', functionSource + "\n\n");
-        return functionSource;
-      }
-    },
-    mergeSource: function() {
-      // WARN: We are not handling the case where buffer is still populated as the source should
-      // not have buffer append operations as their final action.
-      var source = '',
-          buffer;
-      for (var i = 0, len = this.source.length; i < len; i++) {
-        var line = this.source[i];
-        if (line.appendToBuffer) {
-          if (buffer) {
-            buffer = buffer + '\n    + ' + line.content;
-          } else {
-            buffer = line.content;
-          }
-        } else {
-          if (buffer) {
-            source += 'buffer += ' + buffer + ';\n  ';
-            buffer = undefined;
-          }
-          source += line + '\n  ';
-        }
-      }
-      return source;
-    },
-
-    // [blockValue]
-    //
-    // On stack, before: hash, inverse, program, value
-    // On stack, after: return value of blockHelperMissing
-    //
-    // The purpose of this opcode is to take a block of the form
-    // `{{#foo}}...{{/foo}}`, resolve the value of `foo`, and
-    // replace it on the stack with the result of properly
-    // invoking blockHelperMissing.
-    blockValue: function() {
-      this.context.aliases.blockHelperMissing = 'helpers.blockHelperMissing';
-
-      var params = ["depth0"];
-      this.setupParams(0, params);
-
-      this.replaceStack(function(current) {
-        params.splice(1, 0, current);
-        return "blockHelperMissing.call(" + params.join(", ") + ")";
-      });
-    },
-
-    // [ambiguousBlockValue]
-    //
-    // On stack, before: hash, inverse, program, value
-    // Compiler value, before: lastHelper=value of last found helper, if any
-    // On stack, after, if no lastHelper: same as [blockValue]
-    // On stack, after, if lastHelper: value
-    ambiguousBlockValue: function() {
-      this.context.aliases.blockHelperMissing = 'helpers.blockHelperMissing';
-
-      var params = ["depth0"];
-      this.setupParams(0, params);
-
-      var current = this.topStack();
-      params.splice(1, 0, current);
-
-      this.pushSource("if (!" + this.lastHelper + ") { " + current + " = blockHelperMissing.call(" + params.join(", ") + "); }");
-    },
-
-    // [appendContent]
-    //
-    // On stack, before: ...
-    // On stack, after: ...
-    //
-    // Appends the string value of `content` to the current buffer
-    appendContent: function(content) {
-      if (this.pendingContent) {
-        content = this.pendingContent + content;
-      }
-      if (this.stripNext) {
-        content = content.replace(/^\s+/, '');
-      }
-
-      this.pendingContent = content;
-    },
-
-    // [strip]
-    //
-    // On stack, before: ...
-    // On stack, after: ...
-    //
-    // Removes any trailing whitespace from the prior content node and flags
-    // the next operation for stripping if it is a content node.
-    strip: function() {
-      if (this.pendingContent) {
-        this.pendingContent = this.pendingContent.replace(/\s+$/, '');
-      }
-      this.stripNext = 'strip';
-    },
-
-    // [append]
-    //
-    // On stack, before: value, ...
-    // On stack, after: ...
-    //
-    // Coerces `value` to a String and appends it to the current buffer.
-    //
-    // If `value` is truthy, or 0, it is coerced into a string and appended
-    // Otherwise, the empty string is appended
-    append: function() {
-      // Force anything that is inlined onto the stack so we don't have duplication
-      // when we examine local
-      this.flushInline();
-      var local = this.popStack();
-      this.pushSource("if(" + local + " || " + local + " === 0) { " + this.appendToBuffer(local) + " }");
-      if (this.environment.isSimple) {
-        this.pushSource("else { " + this.appendToBuffer("''") + " }");
-      }
-    },
-
-    // [appendEscaped]
-    //
-    // On stack, before: value, ...
-    // On stack, after: ...
-    //
-    // Escape `value` and append it to the buffer
-    appendEscaped: function() {
-      this.context.aliases.escapeExpression = 'this.escapeExpression';
-
-      this.pushSource(this.appendToBuffer("escapeExpression(" + this.popStack() + ")"));
-    },
-
-    // [getContext]
-    //
-    // On stack, before: ...
-    // On stack, after: ...
-    // Compiler value, after: lastContext=depth
-    //
-    // Set the value of the `lastContext` compiler value to the depth
-    getContext: function(depth) {
-      if(this.lastContext !== depth) {
-        this.lastContext = depth;
-      }
-    },
-
-    // [lookupOnContext]
-    //
-    // On stack, before: ...
-    // On stack, after: currentContext[name], ...
-    //
-    // Looks up the value of `name` on the current context and pushes
-    // it onto the stack.
-    lookupOnContext: function(name) {
-      this.push(this.nameLookup('depth' + this.lastContext, name, 'context'));
-    },
-
-    // [pushContext]
-    //
-    // On stack, before: ...
-    // On stack, after: currentContext, ...
-    //
-    // Pushes the value of the current context onto the stack.
-    pushContext: function() {
-      this.pushStackLiteral('depth' + this.lastContext);
-    },
-
-    // [resolvePossibleLambda]
-    //
-    // On stack, before: value, ...
-    // On stack, after: resolved value, ...
-    //
-    // If the `value` is a lambda, replace it on the stack by
-    // the return value of the lambda
-    resolvePossibleLambda: function() {
-      this.context.aliases.functionType = '"function"';
-
-      this.replaceStack(function(current) {
-        return "typeof " + current + " === functionType ? " + current + ".apply(depth0) : " + current;
-      });
-    },
-
-    // [lookup]
-    //
-    // On stack, before: value, ...
-    // On stack, after: value[name], ...
-    //
-    // Replace the value on the stack with the result of looking
-    // up `name` on `value`
-    lookup: function(name) {
-      this.replaceStack(function(current) {
-        return current + " == null || " + current + " === false ? " + current + " : " + this.nameLookup(current, name, 'context');
-      });
-    },
-
-    // [lookupData]
-    //
-    // On stack, before: ...
-    // On stack, after: data, ...
-    //
-    // Push the data lookup operator
-    lookupData: function() {
-      this.pushStackLiteral('data');
-    },
-
-    // [pushStringParam]
-    //
-    // On stack, before: ...
-    // On stack, after: string, currentContext, ...
-    //
-    // This opcode is designed for use in string mode, which
-    // provides the string value of a parameter along with its
-    // depth rather than resolving it immediately.
-    pushStringParam: function(string, type) {
-      this.pushStackLiteral('depth' + this.lastContext);
-
-      this.pushString(type);
-
-      // If it's a subexpression, the string result
-      // will be pushed after this opcode.
-      if (type !== 'sexpr') {
-        if (typeof string === 'string') {
-          this.pushString(string);
-        } else {
-          this.pushStackLiteral(string);
-        }
-      }
-    },
-
-    emptyHash: function() {
-      this.pushStackLiteral('{}');
-
-      if (this.options.stringParams) {
-        this.push('{}'); // hashContexts
-        this.push('{}'); // hashTypes
-      }
-    },
-    pushHash: function() {
-      if (this.hash) {
-        this.hashes.push(this.hash);
-      }
-      this.hash = {values: [], types: [], contexts: []};
-    },
-    popHash: function() {
-      var hash = this.hash;
-      this.hash = this.hashes.pop();
-
-      if (this.options.stringParams) {
-        this.push('{' + hash.contexts.join(',') + '}');
-        this.push('{' + hash.types.join(',') + '}');
-      }
-
-      this.push('{\n    ' + hash.values.join(',\n    ') + '\n  }');
-    },
-
-    // [pushString]
-    //
-    // On stack, before: ...
-    // On stack, after: quotedString(string), ...
-    //
-    // Push a quoted version of `string` onto the stack
-    pushString: function(string) {
-      this.pushStackLiteral(this.quotedString(string));
-    },
-
-    // [push]
-    //
-    // On stack, before: ...
-    // On stack, after: expr, ...
-    //
-    // Push an expression onto the stack
-    push: function(expr) {
-      this.inlineStack.push(expr);
-      return expr;
-    },
-
-    // [pushLiteral]
-    //
-    // On stack, before: ...
-    // On stack, after: value, ...
-    //
-    // Pushes a value onto the stack. This operation prevents
-    // the compiler from creating a temporary variable to hold
-    // it.
-    pushLiteral: function(value) {
-      this.pushStackLiteral(value);
-    },
-
-    // [pushProgram]
-    //
-    // On stack, before: ...
-    // On stack, after: program(guid), ...
-    //
-    // Push a program expression onto the stack. This takes
-    // a compile-time guid and converts it into a runtime-accessible
-    // expression.
-    pushProgram: function(guid) {
-      if (guid != null) {
-        this.pushStackLiteral(this.programExpression(guid));
-      } else {
-        this.pushStackLiteral(null);
-      }
-    },
-
-    // [invokeHelper]
-    //
-    // On stack, before: hash, inverse, program, params..., ...
-    // On stack, after: result of helper invocation
-    //
-    // Pops off the helper's parameters, invokes the helper,
-    // and pushes the helper's return value onto the stack.
-    //
-    // If the helper is not found, `helperMissing` is called.
-    invokeHelper: function(paramSize, name, isRoot) {
-      this.context.aliases.helperMissing = 'helpers.helperMissing';
-      this.useRegister('helper');
-
-      var helper = this.lastHelper = this.setupHelper(paramSize, name, true);
-      var nonHelper = this.nameLookup('depth' + this.lastContext, name, 'context');
-
-      var lookup = 'helper = ' + helper.name + ' || ' + nonHelper;
-      if (helper.paramsInit) {
-        lookup += ',' + helper.paramsInit;
-      }
-
-      this.push(
-        '('
-          + lookup
-          + ',helper '
-            + '? helper.call(' + helper.callParams + ') '
-            + ': helperMissing.call(' + helper.helperMissingParams + '))');
-
-      // Always flush subexpressions. This is both to prevent the compounding size issue that
-      // occurs when the code has to be duplicated for inlining and also to prevent errors
-      // due to the incorrect options object being passed due to the shared register.
-      if (!isRoot) {
-        this.flushInline();
-      }
-    },
-
-    // [invokeKnownHelper]
-    //
-    // On stack, before: hash, inverse, program, params..., ...
-    // On stack, after: result of helper invocation
-    //
-    // This operation is used when the helper is known to exist,
-    // so a `helperMissing` fallback is not required.
-    invokeKnownHelper: function(paramSize, name) {
-      var helper = this.setupHelper(paramSize, name);
-      this.push(helper.name + ".call(" + helper.callParams + ")");
-    },
-
-    // [invokeAmbiguous]
-    //
-    // On stack, before: hash, inverse, program, params..., ...
-    // On stack, after: result of disambiguation
-    //
-    // This operation is used when an expression like `{{foo}}`
-    // is provided, but we don't know at compile-time whether it
-    // is a helper or a path.
-    //
-    // This operation emits more code than the other options,
-    // and can be avoided by passing the `knownHelpers` and
-    // `knownHelpersOnly` flags at compile-time.
-    invokeAmbiguous: function(name, helperCall) {
-      this.context.aliases.functionType = '"function"';
-      this.useRegister('helper');
-
-      this.emptyHash();
-      var helper = this.setupHelper(0, name, helperCall);
-
-      var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');
-
-      var nonHelper = this.nameLookup('depth' + this.lastContext, name, 'context');
-      var nextStack = this.nextStack();
-
-      if (helper.paramsInit) {
-        this.pushSource(helper.paramsInit);
-      }
-      this.pushSource('if (helper = ' + helperName + ') { ' + nextStack + ' = helper.call(' + helper.callParams + '); }');
-      this.pushSource('else { helper = ' + nonHelper + '; ' + nextStack + ' = typeof helper === functionType ? helper.call(' + helper.callParams + ') : helper; }');
-    },
-
-    // [invokePartial]
-    //
-    // On stack, before: context, ...
-    // On stack after: result of partial invocation
-    //
-    // This operation pops off a context, invokes a partial with that context,
-    // and pushes the result of the invocation back.
-    invokePartial: function(name) {
-      var params = [this.nameLookup('partials', name, 'partial'), "'" + name + "'", this.popStack(), "helpers", "partials"];
-
-      if (this.options.data) {
-        params.push("data");
-      }
-
-      this.context.aliases.self = "this";
-      this.push("self.invokePartial(" + params.join(", ") + ")");
-    },
-
-    // [assignToHash]
-    //
-    // On stack, before: value, hash, ...
-    // On stack, after: hash, ...
-    //
-    // Pops a value and hash off the stack, assigns `hash[key] = value`
-    // and pushes the hash back onto the stack.
-    assignToHash: function(key) {
-      var value = this.popStack(),
-          context,
-          type;
-
-      if (this.options.stringParams) {
-        type = this.popStack();
-        context = this.popStack();
-      }
-
-      var hash = this.hash;
-      if (context) {
-        hash.contexts.push("'" + key + "': " + context);
-      }
-      if (type) {
-        hash.types.push("'" + key + "': " + type);
-      }
-      hash.values.push("'" + key + "': (" + value + ")");
-    },
-
-    // HELPERS
-
-    compiler: JavaScriptCompiler,
-
-    compileChildren: function(environment, options) {
-      var children = environment.children, child, compiler;
-
-      for(var i=0, l=children.length; i<l; i++) {
-        child = children[i];
-        compiler = new this.compiler();
-
-        var index = this.matchExistingProgram(child);
-
-        if (index == null) {
-          this.context.programs.push('');     // Placeholder to prevent name conflicts for nested children
-          index = this.context.programs.length;
-          child.index = index;
-          child.name = 'program' + index;
-          this.context.programs[index] = compiler.compile(child, options, this.context);
-          this.context.environments[index] = child;
-        } else {
-          child.index = index;
-          child.name = 'program' + index;
-        }
-      }
-    },
-    matchExistingProgram: function(child) {
-      for (var i = 0, len = this.context.environments.length; i < len; i++) {
-        var environment = this.context.environments[i];
-        if (environment && environment.equals(child)) {
-          return i;
-        }
-      }
-    },
-
-    programExpression: function(guid) {
-      this.context.aliases.self = "this";
-
-      if(guid == null) {
-        return "self.noop";
-      }
-
-      var child = this.environment.children[guid],
-          depths = child.depths.list, depth;
-
-      var programParams = [child.index, child.name, "data"];
-
-      for(var i=0, l = depths.length; i<l; i++) {
-        depth = depths[i];
-
-        if(depth === 1) { programParams.push("depth0"); }
-        else { programParams.push("depth" + (depth - 1)); }
-      }
-
-      return (depths.length === 0 ? "self.program(" : "self.programWithDepth(") + programParams.join(", ") + ")";
-    },
-
-    register: function(name, val) {
-      this.useRegister(name);
-      this.pushSource(name + " = " + val + ";");
-    },
-
-    useRegister: function(name) {
-      if(!this.registers[name]) {
-        this.registers[name] = true;
-        this.registers.list.push(name);
-      }
-    },
-
-    pushStackLiteral: function(item) {
-      return this.push(new Literal(item));
-    },
-
-    pushSource: function(source) {
-      if (this.pendingContent) {
-        this.source.push(this.appendToBuffer(this.quotedString(this.pendingContent)));
-        this.pendingContent = undefined;
-      }
-
-      if (source) {
-        this.source.push(source);
-      }
-    },
-
-    pushStack: function(item) {
-      this.flushInline();
-
-      var stack = this.incrStack();
-      if (item) {
-        this.pushSource(stack + " = " + item + ";");
-      }
-      this.compileStack.push(stack);
-      return stack;
-    },
-
-    replaceStack: function(callback) {
-      var prefix = '',
-          inline = this.isInline(),
-          stack,
-          createdStack,
-          usedLiteral;
-
-      // If we are currently inline then we want to merge the inline statement into the
-      // replacement statement via ','
-      if (inline) {
-        var top = this.popStack(true);
-
-        if (top instanceof Literal) {
-          // Literals do not need to be inlined
-          stack = top.value;
-          usedLiteral = true;
-        } else {
-          // Get or create the current stack name for use by the inline
-          createdStack = !this.stackSlot;
-          var name = !createdStack ? this.topStackName() : this.incrStack();
-
-          prefix = '(' + this.push(name) + ' = ' + top + '),';
-          stack = this.topStack();
-        }
-      } else {
-        stack = this.topStack();
-      }
-
-      var item = callback.call(this, stack);
-
-      if (inline) {
-        if (!usedLiteral) {
-          this.popStack();
-        }
-        if (createdStack) {
-          this.stackSlot--;
-        }
-        this.push('(' + prefix + item + ')');
-      } else {
-        // Prevent modification of the context depth variable. Through replaceStack
-        if (!/^stack/.test(stack)) {
-          stack = this.nextStack();
-        }
-
-        this.pushSource(stack + " = (" + prefix + item + ");");
-      }
-      return stack;
-    },
-
-    nextStack: function() {
-      return this.pushStack();
-    },
-
-    incrStack: function() {
-      this.stackSlot++;
-      if(this.stackSlot > this.stackVars.length) { this.stackVars.push("stack" + this.stackSlot); }
-      return this.topStackName();
-    },
-    topStackName: function() {
-      return "stack" + this.stackSlot;
-    },
-    flushInline: function() {
-      var inlineStack = this.inlineStack;
-      if (inlineStack.length) {
-        this.inlineStack = [];
-        for (var i = 0, len = inlineStack.length; i < len; i++) {
-          var entry = inlineStack[i];
-          if (entry instanceof Literal) {
-            this.compileStack.push(entry);
-          } else {
-            this.pushStack(entry);
-          }
-        }
-      }
-    },
-    isInline: function() {
-      return this.inlineStack.length;
-    },
-
-    popStack: function(wrapped) {
-      var inline = this.isInline(),
-          item = (inline ? this.inlineStack : this.compileStack).pop();
-
-      if (!wrapped && (item instanceof Literal)) {
-        return item.value;
-      } else {
-        if (!inline) {
-          if (!this.stackSlot) {
-            throw new Exception('Invalid stack pop');
-          }
-          this.stackSlot--;
-        }
-        return item;
-      }
-    },
-
-    topStack: function(wrapped) {
-      var stack = (this.isInline() ? this.inlineStack : this.compileStack),
-          item = stack[stack.length - 1];
-
-      if (!wrapped && (item instanceof Literal)) {
-        return item.value;
-      } else {
-        return item;
-      }
-    },
-
-    quotedString: function(str) {
-      return '"' + str
-        .replace(/\\/g, '\\\\')
-        .replace(/"/g, '\\"')
-        .replace(/\n/g, '\\n')
-        .replace(/\r/g, '\\r')
-        .replace(/\u2028/g, '\\u2028')   // Per Ecma-262 7.3 + 7.8.4
-        .replace(/\u2029/g, '\\u2029') + '"';
-    },
-
-    setupHelper: function(paramSize, name, missingParams) {
-      var params = [],
-          paramsInit = this.setupParams(paramSize, params, missingParams);
-      var foundHelper = this.nameLookup('helpers', name, 'helper');
-
-      return {
-        params: params,
-        paramsInit: paramsInit,
-        name: foundHelper,
-        callParams: ["depth0"].concat(params).join(", "),
-        helperMissingParams: missingParams && ["depth0", this.quotedString(name)].concat(params).join(", ")
-      };
-    },
-
-    setupOptions: function(paramSize, params) {
-      var options = [], contexts = [], types = [], param, inverse, program;
-
-      options.push("hash:" + this.popStack());
-
-      if (this.options.stringParams) {
-        options.push("hashTypes:" + this.popStack());
-        options.push("hashContexts:" + this.popStack());
-      }
-
-      inverse = this.popStack();
-      program = this.popStack();
-
-      // Avoid setting fn and inverse if neither are set. This allows
-      // helpers to do a check for `if (options.fn)`
-      if (program || inverse) {
-        if (!program) {
-          this.context.aliases.self = "this";
-          program = "self.noop";
-        }
-
-        if (!inverse) {
-          this.context.aliases.self = "this";
-          inverse = "s

<TRUNCATED>

[06/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/styles/jquery-ui-bootstrap/jquery-ui-1.8.16.custom.css
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/styles/jquery-ui-bootstrap/jquery-ui-1.8.16.custom.css b/contrib/views/slider/src/main/resources/ui/vendor/styles/jquery-ui-bootstrap/jquery-ui-1.8.16.custom.css
deleted file mode 100644
index ad18ce7..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/styles/jquery-ui-bootstrap/jquery-ui-1.8.16.custom.css
+++ /dev/null
@@ -1,1320 +0,0 @@
-/*!
- * jQuery UI Bootstrap (0.22)
- * http://addyosmani.github.com/jquery-ui-bootstrap
- *
- * Copyright 2012, Addy Osmani
- * Dual licensed under the MIT or GPL Version 2 licenses.
- *
- * Portions copyright jQuery UI & Twitter Bootstrap
- */
-
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden { display: none; }
-.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
-.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
-.ui-helper-clearfix { display: inline-block; }
-/* required comment for clearfix to work in Opera \*/
-* html .ui-helper-clearfix { height:1%; }
-.ui-helper-clearfix { display:block; }
-/* end clearfix */
-.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled { cursor: default !important; }
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
-
-
-/*
- * jQuery UI CSS Framework 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- *
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ctl=themeroller
- */
-
-
-/* Component containers
-----------------------------------*/
-.ui-widget {   font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size:13px; }
-.ui-widget .ui-widget { font-size: 1em; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 1em; }
-.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(../img/jquery-ui-bootstrap/ui-bg_glass_75_ffffff_1x400.png) 50% 50% repeat-x; color: #404040; }
-.ui-widget-content a { color: #404040; }
-.ui-widget-header {
-  font-weight:bold;
-  border-color: #0064cd #0064cd #003f81;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  border:1px solid #666;
-
- }
-.ui-widget-header a { color: #222222; }
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
-
-  background-color: #e6e6e6;
-  background-repeat: no-repeat;
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));
-  background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
-  background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);
-  background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
-  background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
-  background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
-
-  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
-
-  color: #333;
-  font-size: 13px;
-  line-height: normal;
-  border: 1px solid #ccc;
-  border-bottom-color: #bbb;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -webkit-transition: 0.1s linear background-image;
-  -moz-transition: 0.1s linear background-image;
-  -ms-transition: 0.1s linear background-image;
-  -o-transition: 0.1s linear background-image;
-  transition: 0.1s linear background-image;
-   overflow: visible;
-
- }
-
-
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {
-  background-position: 0 -15px;
-  color: #333;
-  text-decoration: none;
-
-
- }
-.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa;  font-weight: normal; color: #212121; }
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
-.ui-widget :active { outline: none; }
-
-/* Interaction Cues
-----------------------------------*/
-
-
-.ui-state-highlight p, .ui-state-error p, .ui-state-default p{
-	font-size: 13px;
-	font-weight: normal;
-	line-height: 18px;
-	margin:7px 15px;
-}
-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {
-
-
-  position: relative;
-  margin-bottom: 18px;
-  color: #404040;
-  background-color: #eedc94;
-  background-repeat: repeat-x;
-  background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94));
-  background-image: -moz-linear-gradient(top, #fceec1, #eedc94);
-  background-image: -ms-linear-gradient(top, #fceec1, #eedc94);
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94));
-  background-image: -webkit-linear-gradient(top, #fceec1, #eedc94);
-  background-image: -o-linear-gradient(top, #fceec1, #eedc94);
-  background-image: linear-gradient(top, #fceec1, #eedc94);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0);
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  border-color: #eedc94 #eedc94 #e4c652;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
-  border-width: 1px;
-  border-style: solid;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
-  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
-
-
-}
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {
-
-
-  position: relative;
-  margin-bottom: 18px;
-  color: #ffffff;
-  border-width: 1px;
-  border-style: solid;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
-  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
- background-color: #c43c35;
-  background-repeat: repeat-x;
-  background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));
-  background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));
-  background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: linear-gradient(top, #ee5f5b, #c43c35);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  border-color: #c43c35 #c43c35 #882a25;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-
-
-}
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
-.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
-.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none;  }
-
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { width: 16px; height: 16px; background-image: url(../img/jquery-ui-bootstrap/ui-icons_222222_256x240.png); }
-.ui-widget-content .ui-icon {background-image: url(../img/jquery-ui-bootstrap/ui-icons_222222_256x240.png); }
-.ui-widget-header .ui-icon {background-image: url(../img/jquery-ui-bootstrap/ui-icons_222222_256x240.png); }
-.ui-state-default .ui-icon { background-image: url(../img/jquery-ui-bootstrap/ui-icons_888888_256x240.png); }
-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(../img/jquery-ui-bootstrap/ui-icons_454545_256x240.png); }
-.ui-state-active .ui-icon {background-image: url(../img/jquery-ui-bootstrap/ui-icons_454545_256x240.png); }
-.ui-state-highlight .ui-icon {background-image: url(../img/jquery-ui-bootstrap/ui-icons_2e83ff_256x240.png); }
-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(../img/jquery-ui-bootstrap/ui-icons_f6cf3b_256x240.png); }
-
-/* positioning */
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-off { background-position: -96px -144px; }
-.ui-icon-radio-on { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
-.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-
-
-
-/* Overlays */
-.ui-widget-overlay { background: #aaaaaa url(../img/jquery-ui-bootstrap/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
-.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(../img/jquery-ui-bootstrap/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
- * jQuery UI Resizable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizable#theming
- */
-.ui-resizable { position: relative;}
-.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
-.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
-.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
-.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
-.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
-.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
-.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
-.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
-.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
- * jQuery UI Selectable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectable#theming
- */
-.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
-/*
- * jQuery UI Accordion 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Accordion#theming
- */
-/* IE/Win - Fix animation bug - #4615 */
-.ui-accordion { width: 100%; }
-.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; font-weight:bold; }
-.ui-accordion .ui-accordion-li-fix { display: inline; }
-.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
-.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
-.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
-.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
-.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
-.ui-accordion .ui-accordion-content-active { display: block; }
-/*
- * jQuery UI Autocomplete 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete#theming
- */
-.ui-autocomplete { position: absolute; cursor: default; }
-
-/* workarounds */
-* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
-
-/*
- * jQuery UI Menu 1.8.16
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Menu#theming
- */
-.ui-menu {
-	list-style:none;
-	padding: 2px;
-	margin: 0;
-	display:block;
-	float: left;
-}
-.ui-menu .ui-menu {
-	margin-top: -3px;
-}
-.ui-menu .ui-menu-item {
-	margin:0;
-	padding: 0;
-	zoom: 1;
-	float: left;
-	clear: left;
-	width: 100%;
-}
-.ui-menu .ui-menu-item a {
-	text-decoration:none;
-	display:block;
-	padding:.2em .4em;
-	line-height:1.5;
-	zoom:1;
-}
-.ui-menu .ui-menu-item a.ui-state-hover,
-.ui-menu .ui-menu-item a.ui-state-active {
-	font-weight: normal;
-  background:#0064CD;
-  color:#fff
-}
-
-
-/*
- * jQuery UI Button 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Button#theming
- */
-.ui-button {
-
-  cursor: pointer;
-  display: inline-block;
-  background-color: #e6e6e6;
-  background-repeat: no-repeat;
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));
-  background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
-  background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);
-  background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
-  background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
-  background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
-  padding: 5px 14px 6px;
-  margin: 0;
-  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
-  color: #333;
-  font-size: 13px;
-  line-height: normal;
-  border: 1px solid #ccc;
-  border-bottom-color: #bbb;
-
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -webkit-transition: 0.1s linear background-image;
-  -moz-transition: 0.1s linear background-image;
-  -ms-transition: 0.1s linear background-image;
-  -o-transition: 0.1s linear background-image;
-  transition: 0.1s linear background-image;
-   overflow: visible;
-
-} /* the overflow property removes extra width in IE */
-
-.ui-button-primary {
-  color: #ffffff;
-  background-color: #0064cd;
-  background-repeat: repeat-x;
-  background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));
-  background-image: -moz-linear-gradient(top, #049cdb, #0064cd);
-  background-image: -ms-linear-gradient(top, #049cdb, #0064cd);
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));
-  background-image: -webkit-linear-gradient(top, #049cdb, #0064cd);
-  background-image: -o-linear-gradient(top, #049cdb, #0064cd);
-  background-image: linear-gradient(top, #049cdb, #0064cd);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0);
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  border-color: #0064cd #0064cd #003f81;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-
-}
-
-
-
-.ui-button-success{
-  color:#ffffff;
-  background-color: #57a957;
-  background-repeat: repeat-x;
-  background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957));
-  background-image: -moz-linear-gradient(top, #62c462, #57a957);
-  background-image: -ms-linear-gradient(top, #62c462, #57a957);
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957));
-  background-image: -webkit-linear-gradient(top, #62c462, #57a957);
-  background-image: -o-linear-gradient(top, #62c462, #57a957);
-  background-image: linear-gradient(top, #62c462, #57a957);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  border-color: #57a957 #57a957 #3d773d;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-}
-
-.ui-button-error{
-  color:#ffffff;
-  background-color: #c43c35;
-  background-repeat: repeat-x;
-  background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));
-  background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));
-  background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: linear-gradient(top, #ee5f5b, #c43c35);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  border-color: #c43c35 #c43c35 #882a25;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-}
-
-.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
-button.ui-button-icon-only { } /* button elements seem to need a little more width */
-.ui-button-icons-only { width: 3.4em; }
-button.ui-button-icons-only { width: 3.7em; }
-
-/*button text element */
-
-.ui-button .ui-button-text { display: block;   }
-.ui-button-text-only .ui-button-text {  }
-.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; /*tempfix*/ display:none;}
-.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
-.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
-.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
-/* no icon support for input elements, provide padding by default */
-/* input.ui-button { padding: .4em 1em; } */
-
-/*button icon element(s) */
-.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { top: 50%; margin-top:-3px; margin-bottom:3px; }
-.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
-.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
-.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-
-/*button sets*/
-
-
-.ui-buttonset { margin-right: 7px; }
-.ui-buttonset .ui-state-active {
-  color: #ffffff;
-  background-color: #0064cd;
-  background-repeat: repeat-x;
-  background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));
-  background-image: -moz-linear-gradient(top, #049cdb, #0064cd);
-  background-image: -ms-linear-gradient(top, #049cdb, #0064cd);
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));
-  background-image: -webkit-linear-gradient(top, #049cdb, #0064cd);
-  background-image: -o-linear-gradient(top, #049cdb, #0064cd);
-  background-image: linear-gradient(top, #049cdb, #0064cd);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0);
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  border-color: #0064cd #0064cd #003f81;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-}
-.ui-buttonset .ui-button { margin-left: 0; margin-right: -.4em; }
-
-/* workarounds */
-button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
-
-
-
-/*
- * jQuery UI Dialog 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog#theming
- */
-.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
-.ui-dialog .ui-dialog-titlebar { /*padding: .4em 1em;*/
-
-  position: relative;
-  padding:5px 15px;
-
-  border:0px 0px 0px 1px solid;
-  border-color: white;
-  padding: 5px 15px;
-  font-size: 18px;
-  text-decoration:none;
-  background:none;
-  -moz-border-radius-bottomright: 0px;
-  -webkit-border-bottom-right-radius: 0px;
-  -khtml-border-bottom-right-radius: 0px;
-
-  -moz-border-radius-bottomleft: 0px;
-  -webkit-border-bottom-left-radius: 0px;
-  -khtml-border-bottom-left-radius: 0px;
-  border-bottom-left-radius: 0px;
-
-  border-bottom:1px solid #ccc;
-
-}
-.ui-dialog .ui-dialog-title {
-  float: left;
-  color:#404040;
-  font-weight:bold;
-  margin-top:5px;
-  margin-bottom:5px;
-  padding:5px;
-
-}
-.ui-dialog .ui-dialog-titlebar-close {
-  position: absolute;
-  right: .3em;
-  top: 50%;
-  width: 19px;
-  margin: -10px 0 0 0;
-  padding: 1px;
-  height: 18px;
-  font-size: 20px;
-  font-weight: bold;
-  line-height: 13.5px;
-  text-shadow: 0 1px 0 #ffffff;
-  filter: alpha(opacity=25);
-  -khtml-opacity: 0.25;
-  -moz-opacity: 0.25;
-  opacity: 0.25;
-}
-
-.ui-dialog .ui-dialog-titlebar-close span { 
-  display: block; 
-  margin: 1px;
-  text-indent: 9999px;
-}
-
-.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0;   filter: alpha(opacity=90);
-  -khtml-opacity: 0.90;
-  -moz-opacity: 0.90;
-  opacity: 0.90;   }
-
-.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
-
-.ui-dialog .ui-dialog-buttonpane {
-  text-align: left;
-  border-width: 1px 0 0 0;
-  background-image: none;
-  margin: .5em 0 0 0;
-  background-color: #f5f5f5;
-  padding: 5px 15px 5px;
-  border-top: 1px solid #ddd;
-  -webkit-border-radius: 0 0 6px 6px;
-  -moz-border-radius: 0 0 6px 6px;
-  border-radius: 0 0 6px 6px;
-  -webkit-box-shadow: inset 0 1px 0 #ffffff;
-  -moz-box-shadow: inset 0 1px 0 #ffffff;
-  box-shadow: inset 0 1px 0 #ffffff;
-  zoom: 1;
-  margin-bottom: 0;
-
-}
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
-.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
-.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
-.ui-draggable .ui-dialog-titlebar { cursor: move; }
-
-.ui-dialog-buttonpane .ui-dialog-buttonset .ui-button{
-  color: #ffffff;
-  background-color: #0064cd;
-  background-repeat: repeat-x;
-  background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));
-  background-image: -moz-linear-gradient(top, #049cdb, #0064cd);
-  background-image: -ms-linear-gradient(top, #049cdb, #0064cd);
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));
-  background-image: -webkit-linear-gradient(top, #049cdb, #0064cd);
-  background-image: -o-linear-gradient(top, #049cdb, #0064cd);
-  background-image: linear-gradient(top, #049cdb, #0064cd);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0);
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  border-color: #0064cd #0064cd #003f81;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-}
-/*
- * jQuery UI Slider 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider#theming
- */
-.ui-slider { position: relative; text-align: left; }
-.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
-.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0;
-
-  color: #ffffff;
-  background-color: #0064cd;
-  background-repeat: repeat-x;
-  background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));
-  background-image: -moz-linear-gradient(top, #049cdb, #0064cd);
-  background-image: -ms-linear-gradient(top, #049cdb, #0064cd);
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));
-  background-image: -webkit-linear-gradient(top, #049cdb, #0064cd);
-  background-image: -o-linear-gradient(top, #049cdb, #0064cd);
-  background-image: linear-gradient(top, #049cdb, #0064cd);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0);
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  border-color: #0064cd #0064cd #003f81;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-
-}
-
-.ui-slider-horizontal { height: .8em; }
-.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
-.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
-.ui-slider-horizontal .ui-slider-range-min { left: 0; }
-.ui-slider-horizontal .ui-slider-range-max { right: 0; }
-
-.ui-slider-vertical { width: .8em; height: 100px; }
-.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
-.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
-.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
-.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
- * jQuery UI Tabs 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Tabs#theming
- */
- .ui-tabs .ui-tabs-nav{ background:none; border-color: #ddd;
-  border-style: solid;
-  border-width: 0 0 1px;}
-.ui-tabs { position: relative; padding: .2em; zoom: 1; border:0px;} /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
-
-
-.ui-tabs .ui-tabs-nav li:hover, .ui-tabs .ui-tabs-nav li a:hover{
-  background:whiteSmoke;
-  border-bottom:1px solid #ddd;
-  padding-bottom:0px;
-   color:#00438A;
-}
-
-
-.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; border-bottom:1px solid #DDD; }
-.ui-tabs .ui-tabs-nav li {  text-decoration: none; list-style: none; float: left; position: relative; top: 1px; padding: 0px 0px 1px 0px; white-space: nowrap; background:none; border:0px; 
-
-}
-
-.ui-tabs-nav .ui-state-default{
-  -webkit-box-shadow: 0px 0px 0px #ffffff; /* Saf3-4, iOS 4.0.2 - 4.2, Android 2.3+ */
-     -moz-box-shadow: 0px 0px 0px #ffffff; /* FF3.5 - 3.6 */
-          box-shadow: 0px 0px 0px #ffffff; /* Opera 10.5, IE9, FF4+, Chrome 6+, iOS 5 */
-}
-.ui-tabs .ui-tabs-nav li a {
-
-  float: left;
-  text-decoration: none;
-  cursor: text;
-  padding: 0 15px;
-  margin-right: 2px;
-  line-height: 34px;
-  border: 1px solid transparent;
-  -webkit-border-radius: 4px 4px 0 0;
-  -moz-border-radius: 4px 4px 0 0;
-  border-radius: 4px 4px 0 0;
-
-
- }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 0px; outline:none;}
-
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a {
-
-  background-color: #ffffff;
-  border: 1px solid #ddd;
-  border-bottom-color: #ffffff;
-  cursor: default;
-  color:gray;
-  outline:none;
-}
-
-
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected:hover{
-  background:#ffffff;
-  outline:none;
-}
-
-.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; color:#0069D6; background:none; font-weight:normal; margin-bottom:-1px;} 
-/* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
-.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
-.ui-tabs-panel .ui-button{text-decoration:none;}
-.ui-tabs .ui-tabs-hide { display: none !important; }
-
-
-/* IE fix for background inheritance from ui-widget*/
-.ui-tabs .ui-tabs-nav li{
-  filter:none;
-}
-
-
-
-/*
- * jQuery UI Datepicker 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Datepicker#theming
- */
-.ui-datepicker { width: 17em; padding: .4em .4em 0; display: none; }
-.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; border:0px; font-weight: bold; width: 100%; padding: 4px 0; background-color: #f5f5f5; color: #808080; }
-.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
-
-.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { /*top: 1px;*/ }
-.ui-datepicker .ui-datepicker-prev { left:2px; }
-.ui-datepicker .ui-datepicker-next { right:2px; }
-
-.ui-datepicker .ui-datepicker-prev-hover { /*left:1px;*/ background:#0064CD;color:#fff;}
-.ui-datepicker .ui-datepicker-next-hover { /*right:1px;*/ background:#0064CD;color:#fff;}
-
-.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
-.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
-.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
-.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year { width: 49%;}
-.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
-.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
-.ui-datepicker td { border: 0; padding: 1px; }
-.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
-.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
-.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi { width:auto; }
-.ui-datepicker-multi .ui-datepicker-group { float:left; }
-.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
-.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
-.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
-.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
-.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
-
-/* RTL support */
-.ui-datepicker-rtl { direction: rtl; }
-.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-
-/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
-.ui-datepicker-cover {
-  display: none; /*sorry for IE5*/
-  display/**/: block; /*sorry for IE5*/
-  position: absolute; /*must have*/
-  z-index: -1; /*must have*/
-  filter: mask(); /*must have*/
-  top: -4px; /*must have*/
-  left: -4px; /*must have*/
-  width: 200px; /*must have*/
-  height: 200px; /*must have*/
-}
-
-.ui-datepicker th{
-  font-weight: bold;
-  color: gray;
-}
-
-.ui-datepicker-today a:hover{
-  background-color: #808080;
-  color: #ffffff;
-
-}
-.ui-datepicker-today a{
-  background-color: #BFBFBF;
-  cursor: pointer;
-  padding: 0 4px;
-  margin-bottom:0px;
-
-}
-
-
-.ui-datepicker td a{
-  margin-bottom:0px;
-  border:0px;
-}
-
-.ui-datepicker td:hover{
-  color:white;
-}
-
-.ui-datepicker td .ui-state-default {
-  border:0px;
-  background:none;
-  margin-bottom:0px;
-  padding:5px;
-  color:gray;
-  text-align: center;
-  filter:none;
-}
-
-
-.ui-datepicker td .ui-state-active{
-  background:#BFBFBF;
-  margin-bottom:0px;
-  font-size:normal;
-  text-shadow: 0px;
-  color:white;  
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-}
-
-.ui-datepicker td .ui-state-default:hover{
-  background:#0064cd;
-  color:white;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-}
-
-
-/*
- * jQuery UI Progressbar 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar#theming
- */
-.ui-progressbar { height:2em; text-align: left; }
-.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%;
-
-/*this can be removed if ui-widget-header is blue*/
-    color: #ffffff;
-  background-color: #0064cd;
-  background-repeat: repeat-x;
-  background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));
-  background-image: -moz-linear-gradient(top, #049cdb, #0064cd);
-  background-image: -ms-linear-gradient(top, #049cdb, #0064cd);
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));
-  background-image: -webkit-linear-gradient(top, #049cdb, #0064cd);
-  background-image: -o-linear-gradient(top, #049cdb, #0064cd);
-  background-image: linear-gradient(top, #049cdb, #0064cd);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0);
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  border-color: #0064cd #0064cd #003f81;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- }
-
-
-
-/*** Input field styling from Bootstrap **/
- input, textarea {
-  -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
-  -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
-  -ms-transition: border linear 0.2s, box-shadow linear 0.2s;
-  -o-transition: border linear 0.2s, box-shadow linear 0.2s;
-  transition: border linear 0.2s, box-shadow linear 0.2s;
-  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
-  -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
-  box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
-}
-input:focus, textarea:focus {
-  outline: 0;
-  border-color: rgba(82, 168, 236, 0.8);
-  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
-  -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
-  box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
-}
-input[type=file]:focus, input[type=checkbox]:focus, select:focus {
-  -webkit-box-shadow: none;
-  -moz-box-shadow: none;
-  box-shadow: none;
-  outline: 1px dotted #666;
-}
-
-input[type="text"],
-input[type="password"],
-.ui-autocomplete-input,
-textarea,
-.uneditable-input {
-  display: inline-block;
-  padding: 4px;
-  /* font-size: 13px; */
-  line-height: 18px;
-  /* color: #808080; */
-  border: 1px solid #ccc;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-
-
-
-/**Toolbar**/
-
-.ui-toolbar{
-  padding: 7px 14px;
-  margin: 0 0 18px;
-  background-color: #f5f5f5;
-  background-repeat: repeat-x;
-  background-image: -khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f5f5f5));
-  background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5);
-  background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5);
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f5f5f5));
-  background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5);
-  background-image: -o-linear-gradient(top, #ffffff, #f5f5f5);
-  background-image: linear-gradient(top, #ffffff, #f5f5f5);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);
-  border: 1px solid #ddd;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-  -webkit-box-shadow: inset 0 1px 0 #ffffff;
-  -moz-box-shadow: inset 0 1px 0 #ffffff;
-  box-shadow: inset 0 1px 0 #ffffff;
-}
-
-
-/***Dialog fixes**/
-
-.ui-dialog-buttonset .ui-button:nth-child(2){
-  cursor: pointer;
-  display: inline-block;
-  background-color: #e6e6e6;
-  background-repeat: no-repeat;
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));
-  background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
-  background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);
-  background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
-  background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
-  background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
-  padding: 5px 14px 6px;
-  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
-  color: #333;
-  font-size: 13px;
-  line-height: normal;
-  border: 1px solid #ccc;
-  border-bottom-color: #bbb;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -webkit-transition: 0.1s linear all;
-  -moz-transition: 0.1s linear all;
-  -ms-transition: 0.1s linear all;
-  -o-transition: 0.1s linear all;
-  transition: 0.1s linear all;
-   overflow: visible;
-}
-
-
-
-/***Wijmo Theming**/
-
-div.wijmo-wijmenu{
-  padding:0 20px;
-  background-color: #222;
-  background-color: #222222;
-  background-repeat: repeat-x;
-  background-image: -khtml-gradient(linear, left top, left bottom, from(#333333), to(#222222));
-  background-image: -moz-linear-gradient(top, #333333, #222222);
-  background-image: -ms-linear-gradient(top, #333333, #222222);
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #333333), color-stop(100%, #222222));
-  background-image: -webkit-linear-gradient(top, #333333, #222222);
-  background-image: -o-linear-gradient(top, #333333, #222222);
-  background-image: linear-gradient(top, #333333, #222222);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
-  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-}
-
-.wijmo-wijmenu .ui-state-default{
-  box-shadow: none;
-  color:#BFBFBF;
-}
-
-.wijmo-wijmenu .ui-state-default .wijmo-wijmenu-text{    
-  color:#BFBFBF;
-}
-
-.wijmo-wijmenu .ui-state-hover{
-  background: #444;
-  background: rgba(255, 255, 255, 0.05);
-}
-
-.wijmo-wijmenu .ui-state-hover .wijmo-wijmenu-text{
-  color:#ffffff;
-}
-
-div.wijmo-wijmenu .ui-widget-header h3{
-  position: relative;
-  margin-top:1px;
-  padding:0;
-}
-
-.wijmo-wijmenu h3 a{
-  color: #FFFFFF;
-  display: block;
-  float: left;
-  font-size: 20px;
-  font-weight: 200;
-  line-height: 1;
-  margin-left: -20px;
-  margin-top:1px;
-  padding: 8px 20px 12px;
-}
-
-.wijmo-wijmenu h3 a:hover{
-  background-color: rgba(255, 255, 255, 0.05);
-  color: #FFFFFF;
-  text-decoration: none;
-}
-
-.wijmo-wijmenu .ui-widget-header{
-  border:0px;
-}
-
-.wijmo-wijmenu .wijmo-wijmenu-parent .wijmo-wijmenu-child{
-  padding: 0.3em 0;
-}
-
-div.wijmo-wijmenu .wijmo-wijmenu-item .wijmo-wijmenu-child{
-  background: #333;
-  border:0;
-  margin:0;
-  padding: 6px 0;
-  width:160px;
-  -webkit-border-radius: 0 0 6px 6px;
-  -moz-border-radius: 0 0 6px 6px;
-  border-radius: 0 0 6px 6px;
-  -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
-  -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
-  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
-}
-
-div.wijmo-wijmenu .wijmo-wijmenu-item{
-  margin:0;
-  border:0;
-}
-
-.wijmo-wijmenu a.wijmo-wijmenu-link{
-  margin:0;
-  line-height: 19px;
-  padding: 10px 10px 11px;
-  border:0;
-  -webkit-border-radius: 0;
-  -moz-border-radius: 0;
-  border-radius:0;
-}
-
-div.wijmo-wijmenu .wijmo-wijmenu-child .wijmo-wijmenu-link{
-  display:block;
-  float:none;
-  padding: 4px 15px;
-  width:auto;
-}
-
-div.wijmo-wijmenu .wijmo-wijmenu-child .wijmo-wijmenu-text
-{
-  float:none;
-}
-
-.wijmo-wijmenu .wijmo-wijmenu-item .wijmo-wijmenu-child .ui-state-hover {
-  background: #191919;
-}
-
-.wijmo-wijmenu .wijmo-wijmenu-item .wijmo-wijmenu-separator{
-  padding: 5px 0;
-  background-image: none;
-  background-color: #222;
-  border-top: 1px solid #444;
-  border-bottom:0;
-  border-left:0;
-  border-right:0;
-}
-
-.wijmo-wijmenu .wijmo-wijmenu-item input {
-  -moz-transition: none 0s ease 0s;
-  background-color: rgba(255, 255, 255, 0.3);
-  border: 1px solid #111111;
-  border-radius: 4px 4px 4px 4px;
-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) inset, 0 1px 0 rgba(255, 255, 255, 0.25);
-  color: rgba(255, 255, 255, 0.75);
-  font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
-  line-height: 1;
-  margin: 5px 10px 0 10px;
-  padding: 4px 9px;
-  width:100px;
-}
-
-.wijmo-wijmenu .wijmo-wijmenu-item input:hover {
-  background-color: rgba(255, 255, 255, 0.5);
-  color: #FFFFFF;
-}
-
-.wijmo-wijmenu .wijmo-wijmenu-item input:focus {
-  background-color: #FFFFFF;
-  border: 0 none;
-  box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
-  color: #404040;
-  outline: 0 none;
-  padding: 5px 10px;
-  text-shadow: 0 1px 0 #FFFFFF;
-}
-
-
-.wijmo-wijmenu .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
-  text-shadow:none;
-}
-
-
-.wijmo-wijmenu .ui-state-default{
-  box-shadow: none;
-  color:#BFBFBF;
-  filter: none;
-}
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/styles/rickshaw.css
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/styles/rickshaw.css b/contrib/views/slider/src/main/resources/ui/vendor/styles/rickshaw.css
deleted file mode 100644
index 9102bd4..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/styles/rickshaw.css
+++ /dev/null
@@ -1,307 +0,0 @@
-.rickshaw_graph .detail {
-	pointer-events: none;
-	position: absolute;
-	top: 0;
-	z-index: 2;
-	background: rgba(0, 0, 0, 0.1);
-	bottom: 0;
-	width: 1px;
-	transition: opacity 0.25s linear;
-	-moz-transition: opacity 0.25s linear;
-	-o-transition: opacity 0.25s linear;
-	-webkit-transition: opacity 0.25s linear;
-}
-.rickshaw_graph .detail.inactive {
-	opacity: 0;
-}
-.rickshaw_graph .detail .item.active {
-	opacity: 1;
-}
-.rickshaw_graph .detail .x_label {
-	font-family: Arial, sans-serif;
-	border-radius: 3px;
-	padding: 6px;
-	opacity: 0.5;
-	border: 1px solid #e0e0e0;
-	font-size: 12px;
-	position: absolute;
-	background: white;
-	white-space: nowrap;
-}
-.rickshaw_graph .detail .item {
-	position: absolute;
-	z-index: 2;
-	border-radius: 3px;
-	padding: 0.25em;
-	font-size: 12px;
-	font-family: Arial, sans-serif;
-	opacity: 0;
-	background: rgba(0, 0, 0, 0.4);
-	color: white;
-	border: 1px solid rgba(0, 0, 0, 0.4);
-	margin-left: 1em;
-	margin-top: -1em;
-	white-space: nowrap;
-}
-.rickshaw_graph .detail .item.active {
-	opacity: 1;
-	background: rgba(0, 0, 0, 0.8);
-}
-.rickshaw_graph .detail .item:before {
-	content: "\25c2";
-	position: absolute;
-	left: -0.5em;
-	color: rgba(0, 0, 0, 0.7);
-	width: 0;
-}
-.rickshaw_graph .detail .dot {
-	width: 4px;
-	height: 4px;
-	margin-left: -4px;
-	margin-top: -3px;
-	border-radius: 5px;
-	position: absolute;
-	box-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
-	background: white;
-	border-width: 2px;
-	border-style: solid;
-	display: none;
-	background-clip: padding-box;
-}
-.rickshaw_graph .detail .dot.active {
-	display: block;
-}
-/* graph */
-
-.rickshaw_graph {
-	position: relative;
-}
-.rickshaw_graph svg {
-	display: block;	
-	overflow: hidden;
-}
-
-/* ticks */
-
-.rickshaw_graph .x_tick {
-	position: absolute;
-	top: 0;
-	bottom: 0;
-	width: 0px;
-	border-left: 1px dotted rgba(0, 0, 0, 0.2);
-	pointer-events: none;
-}
-.rickshaw_graph .x_tick .title {
-	position: absolute;
-	font-size: 12px;
-	font-family: Arial, sans-serif;
-	opacity: 0.5;
-	white-space: nowrap;
-	margin-left: 3px;
-	bottom: 1px;
-}
-
-/* annotations */
-
-.rickshaw_annotation_timeline {
-	height: 1px;
-	border-top: 1px solid #e0e0e0;
-	margin-top: 10px;
-	position: relative;
-}
-.rickshaw_annotation_timeline .annotation {
-	position: absolute;
-	height: 6px;
-	width: 6px;
-	margin-left: -2px;
-	top: -3px;
-	border-radius: 5px;
-	background-color: rgba(0, 0, 0, 0.25);
-}
-.rickshaw_graph .annotation_line {
-	position: absolute;
-	top: 0;
-	bottom: -6px;
-	width: 0px;
-	border-left: 2px solid rgba(0, 0, 0, 0.3);
-	display: none;
-}
-.rickshaw_graph .annotation_line.active {
-	display: block;
-}
-
-.rickshaw_graph .annotation_range {
-        background: rgba(0, 0, 0, 0.1);
-        display: none;
-        position: absolute;
-        top: 0;
-        bottom: -6px;
-        z-index: -10;
-}
-.rickshaw_graph .annotation_range.active {
-        display: block;
-}
-.rickshaw_graph .annotation_range.active.offscreen {
-        display: none;
-}
-
-.rickshaw_annotation_timeline .annotation .content {
-	background: white;
-	color: black;
-	opacity: 0.9;
-	padding: 5px 5px;
-	box-shadow: 0 0 2px rgba(0, 0, 0, 0.8);
-	border-radius: 3px;
-	position: relative;
-	z-index: 20;
-	font-size: 12px;
-	padding: 6px 8px 8px;
-	top: 18px;
-	left: -11px;
-	width: 160px;
-	display: none;
-	cursor: pointer;
-}
-.rickshaw_annotation_timeline .annotation .content:before {
-	content: "\25b2";
-	position: absolute;
-	top: -11px;
-	color: white;
-	text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.8);
-}
-.rickshaw_annotation_timeline .annotation.active,
-.rickshaw_annotation_timeline .annotation:hover {
-	background-color: rgba(0, 0, 0, 0.8);
-	cursor: none;
-}
-.rickshaw_annotation_timeline .annotation .content:hover {
-	z-index: 50;
-}
-.rickshaw_annotation_timeline .annotation.active .content {
-	display: block;
-}
-.rickshaw_annotation_timeline .annotation:hover .content {
-	display: block;
-	z-index: 50;
-}
-.rickshaw_graph .y_axis {
-	fill: none;
-}
-.rickshaw_graph .y_ticks .tick {
-	stroke: rgba(0, 0, 0, 0.16);
-	stroke-width: 2px;
-	shape-rendering: crisp-edges;
-	pointer-events: none;
-}
-.rickshaw_graph .y_grid .tick {
-	z-index: -1;
-	stroke: rgba(0, 0, 0, 0.20);
-	stroke-width: 1px;
-	stroke-dasharray: 1 1;
-}
-.rickshaw_graph .y_grid path {
-	fill: none;
-	stroke: none;
-}
-.rickshaw_graph .y_ticks path {
-	fill: none;
-	stroke: #808080;
-}
-.rickshaw_graph .y_ticks text {
-	opacity: 0.5;
-	font-size: 12px;
-	pointer-events: none;
-}
-.rickshaw_graph .x_tick.glow .title,
-.rickshaw_graph .y_ticks.glow text {
-	fill: black;
-	color: black;
-	text-shadow: 
-		-1px 1px 0 rgba(255, 255, 255, 0.1),
-		1px -1px 0 rgba(255, 255, 255, 0.1),
-		1px 1px 0 rgba(255, 255, 255, 0.1),
-		0px 1px 0 rgba(255, 255, 255, 0.1),
-		0px -1px 0 rgba(255, 255, 255, 0.1),
-		1px 0px 0 rgba(255, 255, 255, 0.1),
-		-1px 0px 0 rgba(255, 255, 255, 0.1),
-		-1px -1px 0 rgba(255, 255, 255, 0.1);
-}
-.rickshaw_graph .x_tick.inverse .title,
-.rickshaw_graph .y_ticks.inverse text {
-	fill: white;
-	color: white;
-	text-shadow: 
-		-1px 1px 0 rgba(0, 0, 0, 0.8),
-		1px -1px 0 rgba(0, 0, 0, 0.8),
-		1px 1px 0 rgba(0, 0, 0, 0.8),
-		0px 1px 0 rgba(0, 0, 0, 0.8),
-		0px -1px 0 rgba(0, 0, 0, 0.8),
-		1px 0px 0 rgba(0, 0, 0, 0.8),
-		-1px 0px 0 rgba(0, 0, 0, 0.8),
-		-1px -1px 0 rgba(0, 0, 0, 0.8);
-}
-.rickshaw_legend {
-	font-family: Arial;
-	font-size: 12px;
-	color: white;
-	background: #404040;
-	display: inline-block;
-	padding: 12px 5px; 
-	border-radius: 2px;
-	position: relative;
-}
-.rickshaw_legend:hover {
-	z-index: 10;
-}
-.rickshaw_legend .swatch {
-	width: 10px;
-	height: 10px;
-	border: 1px solid rgba(0, 0, 0, 0.2);
-}
-.rickshaw_legend .line {
-	clear: both;
-	line-height: 140%;
-	padding-right: 15px;
-}
-.rickshaw_legend .line .swatch {
-	display: inline-block;
-	margin-right: 3px;
-	border-radius: 2px;
-}
-.rickshaw_legend .label {
-	white-space: nowrap;
-	display: inline;
-}
-.rickshaw_legend .action:hover {
-	opacity: 0.6;
-}
-.rickshaw_legend .action {
-	margin-right: 0.2em;
-	font-size: 10px;
-	opacity: 0.2;
-	cursor: pointer;
-	font-size: 14px;
-}
-.rickshaw_legend .line.disabled {
-	opacity: 0.4;
-}
-.rickshaw_legend ul {
-	list-style-type: none;
-	margin: 0;
-	padding: 0;
-	margin: 2px;
-	cursor: pointer;
-}
-.rickshaw_legend li {
-	padding: 0 0 0 2px;
-	min-width: 80px;
-	white-space: nowrap;
-}
-.rickshaw_legend li:hover {
-	background: rgba(255, 255, 255, 0.08);
-	border-radius: 3px;
-}
-.rickshaw_legend li:active {
-	background: rgba(255, 255, 255, 0.2);
-	border-radius: 3px;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/view.log4j.properties
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/view.log4j.properties b/contrib/views/slider/src/main/resources/view.log4j.properties
deleted file mode 100644
index 8fddbff..0000000
--- a/contrib/views/slider/src/main/resources/view.log4j.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright 2011 The Apache Software Foundation
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-log4j.appender.sliderView=org.apache.log4j.RollingFileAppender
-log4j.appender.sliderView.File=${ambari.log.dir}/slider-view/slider-view.log
-log4j.appender.sliderView.MaxFileSize=80MB
-log4j.appender.sliderView.MaxBackupIndex=60
-log4j.appender.sliderView.layout=org.apache.log4j.PatternLayout
-log4j.appender.sliderView.layout.ConversionPattern=%d{DATE} %5p [%t] [%X{viewName} %X{viewVersion} %X{viewInstanceName}] %c{1}:%L - %m%n
-
-log4j.logger.org.apache.ambari.view.slider=INFO,sliderView
-log4j.additivity.org.apache.ambari.view.slider=false
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/view.xml
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/view.xml b/contrib/views/slider/src/main/resources/view.xml
deleted file mode 100644
index f4f6e9e..0000000
--- a/contrib/views/slider/src/main/resources/view.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License. Kerberos, LDAP, Custom. Binary/Htt
--->
-<view>
-  <name>SLIDER</name>
-  <label>Slider Apps View</label>
-  <version>2.0.0</version>
-  <build>${env.BUILD_NUMBER}</build>
-	<parameter>
-		<name>ambari.server.url</name>
-		<description>Ambari Server Cluster REST API URL (for example:
-			http://ambari.server:8080/api/v1/clusters/c1)</description>
-		<required>true</required>
-	</parameter>
-	<parameter>
-		<name>ambari.server.username</name>
-		<description>Cluster Operator username (for example: admin)
-		</description>
-		<required>true</required>
-	</parameter>
-	<parameter>
-		<name>ambari.server.password</name>
-		<description>Cluster Operator password (for example: admin)
-		</description>
-		<required>true</required>
-		<masked>true</masked>
-	</parameter>
-	<parameter>
-		<name>slider.user</name>
-		<description>User this view instance should run as. Specifying an empty value runs view as YARN service user (for example 'yarn'). Specifying '${username}' runs the view as the currently logged in user. Specifying any other value runs the view as that user.
-			Administrators should check that the HDFS home folder for that user is created and accessible.
-        </description>
-		<required>false</required>
-	</parameter>
-	<parameter>
-		<name>view.kerberos.principal</name>
-		<description>Kerberos principal associated with this view. For example: ambari/_HOST@EXAMPLE.COM.
-			Administrators should make sure that HDFS service has the 'hadoop.proxyuser.[user].groups' and 'hadoop.proxyuser.[user].hosts' configs populated in 'core-site.xml'.
-		</description>
-		<required>false</required>
-	</parameter>
-	<parameter>
-		<name>view.kerberos.principal.keytab</name>
-		<description>Path to the Kerberos principal keytab used for view's user. For example: /etc/security/keytabs/ambari.headless.keytab
-			Administrators should make sure that HDFS service has the 'hadoop.proxyuser.[user].groups' and 'hadoop.proxyuser.[user].hosts' configs populated in 'core-site.xml'.
-		</description>
-		<required>false</required>
-	</parameter>
-  <resource>
-    <name>status</name>
-    <service-class>org.apache.ambari.view.slider.rest.ViewStatusResource</service-class>
-  </resource>
-  <resource>
-    <name>app</name>
-    <plural-name>apps</plural-name>
-    <id-property>id</id-property>
-    <resource-class>org.apache.ambari.view.slider.SliderApp</resource-class>
-    <provider-class>org.apache.ambari.view.slider.SliderAppsResourceProvider</provider-class>
-    <service-class>org.apache.ambari.view.slider.rest.SliderAppsResource</service-class>
-  </resource>
-  <resource>
-    <name>apptype</name>
-    <plural-name>apptypes</plural-name>
-    <id-property>id</id-property>
-    <resource-class>org.apache.ambari.view.slider.SliderAppType</resource-class>
-    <provider-class>org.apache.ambari.view.slider.SliderAppTypesResourceProvider</provider-class>
-    <service-class>org.apache.ambari.view.slider.rest.SliderAppTypesResource</service-class>
-  </resource>
-</view>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/test/java/org/apache/ambari/view/slider/SliderClientTest.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/test/java/org/apache/ambari/view/slider/SliderClientTest.java b/contrib/views/slider/src/test/java/org/apache/ambari/view/slider/SliderClientTest.java
deleted file mode 100644
index 8af22b7..0000000
--- a/contrib/views/slider/src/test/java/org/apache/ambari/view/slider/SliderClientTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider;
-
-import org.apache.slider.client.SliderClient;
-import org.apache.slider.common.SliderKeys;
-import org.junit.Assert;
-import org.junit.Test;
-
-public class SliderClientTest {
-	@Test
-	public void testSliderClientClassAvailability() {
-		Assert.assertEquals(SliderKeys.APP_TYPE, SliderClient.APP_TYPE);
-	}
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/test/java/org/apache/ambari/view/slider/rest/client/SliderAppMasterClientTest.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/test/java/org/apache/ambari/view/slider/rest/client/SliderAppMasterClientTest.java b/contrib/views/slider/src/test/java/org/apache/ambari/view/slider/rest/client/SliderAppMasterClientTest.java
deleted file mode 100644
index 05bff35..0000000
--- a/contrib/views/slider/src/test/java/org/apache/ambari/view/slider/rest/client/SliderAppMasterClientTest.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider.rest.client;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class SliderAppMasterClientTest {
-
-  @Test
-  public void testSliderClientClassAvailability() {
-    SliderAppMasterClient client = new SliderAppMasterClient("http://tmpurl.org", null);
-    Map<String, Metric> metrics = new HashMap<String, Metric>();
-    Map<String, String> jmxProperties = new HashMap<String, String>();
-    Map<String, Map<String, Object>> categories = new HashMap<String, Map<String, Object>>();
-    metrics.put("metricAverageLoad",
-                new Metric("Hadoop:service=HBase,name=Master,sub=Server.averageLoad", true, false));
-    metrics.put("DeadRegionServers",
-                new Metric("Hadoop:service=HBase,name=Master,sub=Server.numDeadRegionServers", true, false));
-    metrics.put("ClusterId",
-                new Metric("Hadoop:service=HBase,name=Master,sub=Server.tag.clusterId", true, false));
-    metrics.put("IsActiveMaster",
-                new Metric("Hadoop:service=HBase,name=Master,sub=Server.tag.isActiveMaster", true, false));
-    metrics.put("peakUsageCommitted",
-                new Metric("java#lang:type=MemoryPool,name=Code Cache.PeakUsage.committed", true, false));
-
-    Map<String, Object> masterServer = new HashMap<String, Object>();
-    masterServer.put("averageLoad", "0.1");
-    masterServer.put("numDeadRegionServers", "1");
-    masterServer.put("tag.clusterId", "11");
-    categories.put("Hadoop:service=HBase,name=Master,sub=Server", masterServer);
-    Map<String, Object> memPool = new HashMap<String, Object>();
-    Map<String, Object> peakUsage = new HashMap<String, Object>();
-    peakUsage.put("committed", 354);
-    peakUsage.put("uncommitted", 356);
-    memPool.put("PeakUsage", peakUsage);
-    memPool.put("SomeOther", "other");
-    categories.put("java.lang:type=MemoryPool,name=Code Cache", memPool);
-
-    SliderAppJmxHelper.addJmxPropertiesFromBeans(jmxProperties, categories, metrics);
-    Assert.assertEquals(jmxProperties.size(), 4);
-  }
-
-  @Test
-  public void testMetricMatchers() throws Exception {
-    Metric m1 = new Metric("a_b.c", true, false);
-    Assert.assertEquals(m1.getJmxBeanKeyName(), "a_b");
-    List<List<String>> matchers = m1.getMatchers();
-    Assert.assertEquals(matchers.size(), 1);
-    Assert.assertEquals(matchers.get(0).size(), 1);
-    Assert.assertEquals(matchers.get(0).get(0), "c");
-
-    m1 = new Metric("a_b.c.d", true, false);
-    Assert.assertEquals(m1.getJmxBeanKeyName(), "a_b");
-    matchers = m1.getMatchers();
-    Assert.assertEquals(matchers.size(), 2);
-    Assert.assertEquals(matchers.get(0).size(), 2);
-    Assert.assertEquals(matchers.get(0).get(0), "c");
-    Assert.assertEquals(matchers.get(0).get(1), "d");
-    Assert.assertEquals(matchers.get(1).size(), 1);
-    Assert.assertEquals(matchers.get(1).get(0), "c.d");
-
-    m1 = new Metric("a_b.c.d.e", true, false);
-    Assert.assertEquals(m1.getJmxBeanKeyName(), "a_b");
-    matchers = m1.getMatchers();
-    Assert.assertEquals(matchers.size(), 4);
-    Assert.assertEquals(matchers.get(0).size(), 3);
-    Assert.assertEquals(matchers.get(0).get(1), "d");
-    Assert.assertEquals(matchers.get(0).get(2), "e");
-    Assert.assertEquals(matchers.get(2).size(), 2);
-    Assert.assertEquals(matchers.get(2).get(0), "c.d");
-    Assert.assertEquals(matchers.get(2).get(1), "e");
-    Assert.assertEquals(matchers.get(3).size(), 1);
-    Assert.assertEquals(matchers.get(3).get(0), "c.d.e");
-  }
-
-  @Test
-  public void testReadMetricsFromJson() throws Exception {
-    String jsonJmx = "{\n"
-                     + "\"tasks.total\": 28,\n"
-                     + "\"slots.total\": 1,\n"
-                     + "\"slots.free\": 0,\n"
-                     + "\"supervisors\": 1,\n"
-                     + "\"executors.total\": 28,\n"
-                     + "\"slots.used\": 1,\n"
-                     + "\"topologies\": 1,\n"
-                     + "\"nimbus.uptime\": 2026\n"
-                     + "}";
-    InputStream stream = new ByteArrayInputStream(jsonJmx.getBytes("UTF-8"));
-    Map<String, Metric> metrics = new HashMap<String, Metric>();
-    Map<String, String> jmxProperties = new HashMap<String, String>();
-    metrics.put("FreeSlots", new Metric("$['slots.free']", true, false));
-    metrics.put("Tasks", new Metric("$['tasks.total']", true, false));
-    metrics.put("Executors", new Metric("$['executors.total']", true, false));
-    metrics.put("Items", new Metric("['items']", true, false));
-    SliderAppJmxHelper.extractMetricsFromJmxJson(stream, "jmxurl", jmxProperties, metrics);
-    Assert.assertEquals(jmxProperties.size(), 3);
-    Assert.assertEquals(jmxProperties.get("FreeSlots"), "0");
-    Assert.assertEquals(jmxProperties.get("Tasks"), "28");
-    Assert.assertEquals(jmxProperties.get("Executors"), "28");
-  }
-
-  @Test
-  public void testReadMetricsFromXml() throws Exception {
-    String jsonJmx = "<stats>\n"
-                     + "<masterGoalState>NORMAL</masterGoalState>\n"
-                     + "<masterState>NORMAL</masterState>\n"
-                     + "<badTabletServers></badTabletServers>\n"
-                     + "<tabletServersShuttingDown></tabletServersShuttingDown>\n"
-                     + "<unassignedTablets>0</unassignedTablets>\n"
-                     + "<deadTabletServers></deadTabletServers>\n"
-                     + "<deadLoggers></deadLoggers>\n"
-                     + "<tables>\n"
-                     + "<table>\n"
-                     + "<tablename>!METADATA</tablename>\n"
-                     + "<tableId>!0</tableId>\n"
-                     + "<tableState>ONLINE</tableState>\n"
-                     + "<tablets>3</tablets>\n"
-                     + "<onlineTablets>3</onlineTablets>\n"
-                     + "<recs>49</recs>\n"
-                     + "<recsInMemory>24</recsInMemory>\n"
-                     + "<ingest>1.1271868150075986E-4</ingest>\n"
-                     + "<ingestByteRate>0.00475332746606865</ingestByteRate>\n"
-                     + "<query>0.014071304698085596</query>\n"
-                     + "<queryByteRate>0.014071304698085596</queryByteRate>\n"
-                     + "<majorCompactions>\n"
-                     + "<running>0</running>\n"
-                     + "<queued>0</queued>\n"
-                     + "</majorCompactions>\n"
-                     + "</table>\n"
-                     + "</tables>\n"
-                     + "<totals>\n"
-                     + "<ingestrate>0.0016737652847869573</ingestrate>\n"
-                     + "<queryrate>0.014071304698085596</queryrate>\n"
-                     + "<diskrate>0.0</diskrate>\n"
-                     + "<numentries>554</numentries>\n"
-                     + "</totals>\n"
-                     + "</stats>";
-    InputStream stream = new ByteArrayInputStream(jsonJmx.getBytes("UTF-8"));
-    Map<String, Metric> metrics = new HashMap<String, Metric>();
-    Map<String, String> jmxProperties = new HashMap<String, String>();
-    metrics.put("masterGoalState", new Metric("/stats/masterGoalState", true, false));
-    metrics.put("masterState", new Metric("/stats/masterState", true, false));
-    metrics.put("totals_diskrate", new Metric("/stats/totals/diskrate", true, false));
-    metrics.put("totals_diskaccess", new Metric("/stats/totals/diskaccess", true, false));
-    metrics.put("badTabletServers", new Metric("/stats/badTabletServers", true, false));
-    SliderAppJmxHelper.extractMetricsFromJmxXML(stream, "jmxurl", jmxProperties, metrics);
-    Assert.assertEquals(jmxProperties.size(), 5);
-    Assert.assertEquals(jmxProperties.get("masterGoalState"), "NORMAL");
-    Assert.assertEquals(jmxProperties.get("masterState"), "NORMAL");
-    Assert.assertEquals(jmxProperties.get("totals_diskrate"), "0.0");
-    Assert.assertEquals(jmxProperties.get("totals_diskaccess"), "");
-    Assert.assertEquals(jmxProperties.get("badTabletServers"), "");
-  }
-}


[28/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/sinon-qunit-1.0.0.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/sinon-qunit-1.0.0.js b/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/sinon-qunit-1.0.0.js
deleted file mode 100644
index c26232f..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/sinon-qunit-1.0.0.js
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * sinon-qunit 1.0.0, 2010/12/09
- *
- * @author Christian Johansen (christian@cjohansen.no)
- *
- * (The BSD License)
- * 
- * Copyright (c) 2010-2011, Christian Johansen, christian@cjohansen.no
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 
- *     * Redistributions of source code must retain the above copyright notice,
- *       this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright notice,
- *       this list of conditions and the following disclaimer in the documentation
- *       and/or other materials provided with the distribution.
- *     * Neither the name of Christian Johansen nor the names of his contributors
- *       may be used to endorse or promote products derived from this software
- *       without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/*global sinon, QUnit, test*/
-sinon.assert.fail = function (msg) {
-    QUnit.ok(false, msg);
-};
-
-sinon.assert.pass = function (assertion) {
-    QUnit.ok(true, assertion);
-};
-
-sinon.config = {
-    injectIntoThis: true,
-    injectInto: null,
-    properties: ["spy", "stub", "mock", "clock", "sandbox"],
-    useFakeTimers: true,
-    useFakeServer: false
-};
-
-(function (global) {
-    var qTest = QUnit.test;
-    
-    QUnit.test = global.test = function (testName, expected, callback, async) {
-        if (arguments.length === 2) {
-            callback = expected;
-            expected = null;
-        }
-
-        return qTest(testName, expected, sinon.test(callback), async);
-    };
-}(this));

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/tests.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/tests.js b/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/tests.js
deleted file mode 100644
index b830f0f..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/tests.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var folderOrder = [
-  'test'
-];
-
-folderOrder.forEach(function(folder) {
-  window.require.list().filter(function(module) {
-    return new RegExp('^' + folder + '/').test(module);
-  }).forEach(function(module) {
-      require(module);
-    });
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/stylesheets/qunit.css
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/stylesheets/qunit.css b/contrib/views/slider/src/main/resources/ui/app/assets/stylesheets/qunit.css
deleted file mode 100644
index 9437b4b..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/stylesheets/qunit.css
+++ /dev/null
@@ -1,237 +0,0 @@
-/*!
- * QUnit 1.15.0
- * http://qunitjs.com/
- *
- * Copyright 2014 jQuery Foundation and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2014-08-08T16:00Z
- */
-
-/** Font Family and Sizes */
-
-#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
-	font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
-}
-
-#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
-#qunit-tests { font-size: smaller; }
-
-
-/** Resets */
-
-#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
-	margin: 0;
-	padding: 0;
-}
-
-
-/** Header */
-
-#qunit-header {
-	padding: 0.5em 0 0.5em 1em;
-
-	color: #8699A4;
-	background-color: #0D3349;
-
-	font-size: 1.5em;
-	line-height: 1em;
-	font-weight: 400;
-
-	border-radius: 5px 5px 0 0;
-}
-
-#qunit-header a {
-	text-decoration: none;
-	color: #C2CCD1;
-}
-
-#qunit-header a:hover,
-#qunit-header a:focus {
-	color: #FFF;
-}
-
-#qunit-testrunner-toolbar label {
-	display: inline-block;
-	padding: 0 0.5em 0 0.1em;
-}
-
-#qunit-banner {
-	height: 5px;
-}
-
-#qunit-testrunner-toolbar {
-	padding: 0.5em 1em 0.5em 1em;
-	color: #5E740B;
-	background-color: #EEE;
-	overflow: hidden;
-}
-
-#qunit-userAgent {
-	padding: 0.5em 1em 0.5em 1em;
-	background-color: #2B81AF;
-	color: #FFF;
-	text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
-}
-
-#qunit-modulefilter-container {
-	float: right;
-}
-
-/** Tests: Pass/Fail */
-
-#qunit-tests {
-	list-style-position: inside;
-}
-
-#qunit-tests li {
-	padding: 0.4em 1em 0.4em 1em;
-	border-bottom: 1px solid #FFF;
-	list-style-position: inside;
-}
-
-#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running  {
-	display: none;
-}
-
-#qunit-tests li strong {
-	cursor: pointer;
-}
-
-#qunit-tests li a {
-	padding: 0.5em;
-	color: #C2CCD1;
-	text-decoration: none;
-}
-#qunit-tests li a:hover,
-#qunit-tests li a:focus {
-	color: #000;
-}
-
-#qunit-tests li .runtime {
-	float: right;
-	font-size: smaller;
-}
-
-.qunit-assert-list {
-	margin-top: 0.5em;
-	padding: 0.5em;
-
-	background-color: #FFF;
-
-	border-radius: 5px;
-}
-
-.qunit-collapsed {
-	display: none;
-}
-
-#qunit-tests table {
-	border-collapse: collapse;
-	margin-top: 0.2em;
-}
-
-#qunit-tests th {
-	text-align: right;
-	vertical-align: top;
-	padding: 0 0.5em 0 0;
-}
-
-#qunit-tests td {
-	vertical-align: top;
-}
-
-#qunit-tests pre {
-	margin: 0;
-	white-space: pre-wrap;
-	word-wrap: break-word;
-}
-
-#qunit-tests del {
-	background-color: #E0F2BE;
-	color: #374E0C;
-	text-decoration: none;
-}
-
-#qunit-tests ins {
-	background-color: #FFCACA;
-	color: #500;
-	text-decoration: none;
-}
-
-/*** Test Counts */
-
-#qunit-tests b.counts                       { color: #000; }
-#qunit-tests b.passed                       { color: #5E740B; }
-#qunit-tests b.failed                       { color: #710909; }
-
-#qunit-tests li li {
-	padding: 5px;
-	background-color: #FFF;
-	border-bottom: none;
-	list-style-position: inside;
-}
-
-/*** Passing Styles */
-
-#qunit-tests li li.pass {
-	color: #3C510C;
-	background-color: #FFF;
-	border-left: 10px solid #C6E746;
-}
-
-#qunit-tests .pass                          { color: #528CE0; background-color: #D2E0E6; }
-#qunit-tests .pass .test-name               { color: #366097; }
-
-#qunit-tests .pass .test-actual,
-#qunit-tests .pass .test-expected           { color: #999; }
-
-#qunit-banner.qunit-pass                    { background-color: #C6E746; }
-
-/*** Failing Styles */
-
-#qunit-tests li li.fail {
-	color: #710909;
-	background-color: #FFF;
-	border-left: 10px solid #EE5757;
-	white-space: pre;
-}
-
-#qunit-tests > li:last-child {
-	border-radius: 0 0 5px 5px;
-}
-
-#qunit-tests .fail                          { color: #000; background-color: #EE5757; }
-#qunit-tests .fail .test-name,
-#qunit-tests .fail .module-name             { color: #000; }
-
-#qunit-tests .fail .test-actual             { color: #EE5757; }
-#qunit-tests .fail .test-expected           { color: #008000; }
-
-#qunit-banner.qunit-fail                    { background-color: #EE5757; }
-
-
-/** Result */
-
-#qunit-testresult {
-	padding: 0.5em 1em 0.5em 1em;
-
-	color: #2B81AF;
-	background-color: #D2E0E6;
-
-	border-bottom: 1px solid #FFF;
-}
-#qunit-testresult .module-name {
-	font-weight: 700;
-}
-
-/** Fixture */
-
-#qunit-fixture {
-	position: absolute;
-	top: -10000px;
-	left: -10000px;
-	width: 1000px;
-	height: 1000px;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/tests.html
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/tests.html b/contrib/views/slider/src/main/resources/ui/app/assets/tests.html
deleted file mode 100644
index b6591da..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/tests.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!--
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
--->
-
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-  <title>Slider tests</title>
-  <link rel="stylesheet" href="stylesheets/qunit.css">
-</head>
-<body>
-<div id="qunit"></div>
-<div id="qunit-fixture"></div>
-<script src="javascripts/qunit.js"></script>
-<script src="javascripts/vendor.js"></script>
-<script src="javascripts/jquery.mockjax.js"></script>
-<script src="javascripts/ember-qunit.js"></script>
-<script src="javascripts/sinon-1.13.0.js"></script>
-<script src="javascripts/sinon-qunit-1.0.0.js"></script>
-<script src="javascripts/app.js"></script>
-<script>
-  emq.globalize();
-  require('initialize');
-  App.setupForTesting();
-  App.injectTestHelpers();
-  setResolver(Em.DefaultResolver.create({ namespace: App }));
-</script>
-<script src="javascripts/test.js"></script>
-<script src="javascripts/tests.js"></script>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/components/.gitkeep
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/components/.gitkeep b/contrib/views/slider/src/main/resources/ui/app/components/.gitkeep
deleted file mode 100755
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/components/configSection.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/components/configSection.js b/contrib/views/slider/src/main/resources/ui/app/components/configSection.js
deleted file mode 100644
index 667192f..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/components/configSection.js
+++ /dev/null
@@ -1,164 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.ConfigSectionComponent = Em.Component.extend({
-
-  layoutName: 'components/configSection',
-
-  config: null,
-
-  section: '',
-
-  /**
-   * label for current section
-   * @return {String}
-   */
-  sectionLabel: function () {
-    return this.get('section').classify().replace(/([A-Z])/g, ' $1');
-  }.property(),
-
-  /**
-   * Return True is section name equals 'general'
-   * @type {Boolean}
-   */
-  isGeneral: Ember.computed.equal('section', 'general'),
-
-  /**
-   * Return True is section name equals 'custom'
-   * @type {Boolean}
-   */
-  isCustom: Ember.computed.equal('section', 'custom'),
-
-  /**
-   * Filtered configs for current section
-   * @type {Array}
-   */
-  sectionConfigs: Ember.computed.filter('config', function (item) {
-    if (item.isSet) {
-      return item.section === this.get('section');
-    }
-    if (this.get('isGeneral')) {
-      return !item.name.match('^site.') && this.get('predefinedConfigNames').contains(item.name);
-    }
-    else {
-      if (this.get('isCustom')) {
-        return !this.get('predefinedConfigNames').contains(item.name);
-      }
-      else {
-        return !!item.name.match('^site.' + this.get('section'));
-      }
-    }
-  }),
-
-  /**
-   * Is button "Add Property" visible
-   * True - yes, false - no (and "App Property"-form is visible)
-   * @type {bool}
-   */
-  buttonVisible: true,
-
-  /**
-   * Template for new config
-   * @type {Ember.Object}
-   */
-  newConfig: Em.Object.create({
-    name: '',
-    value: '',
-    nameError: '',
-    hasError: false
-  }),
-
-  /**
-   * Clear <code>newConfig</code>
-   * @method cleanNewConfig
-   */
-  cleanNewConfig: function() {
-    this.get('newConfig').setProperties({
-      name: '',
-      value: '',
-      messsage: '',
-      hasError: false
-    });
-  },
-
-  addPropertyModalButtons: [
-    Ember.Object.create({title: Em.I18n.t('common.cancel'), clicked:"discard", dismiss: 'modal'}),
-    Ember.Object.create({title: Em.I18n.t('common.add'), clicked:"submit", type:'success'})
-  ],
-
-  addPropertyModalTitle: Em.I18n.t('configs.add_property'),
-
-  tooltipRemove:  Em.I18n.t('common.remove'),
-
-  actions: {
-
-    /**
-     * Click on "App Property"-button
-     * @method addProperty
-     */
-    addProperty: function() {
-      return Bootstrap.ModalManager.show('addPropertyModal');
-    },
-
-    /**
-     * Delete custom config added by user
-     * @param {{name: string, label: string, value: *}} config
-     * @method deleteConfig
-     */
-    deleteConfig: function(config) {
-      this.get('config').removeObject(config);
-    },
-
-    /**
-     * Validate and save custom config added by user
-     * @method submit
-     */
-    submit: function() {
-      var name = this.get('newConfig.name'),
-        value = this.get('newConfig.value');
-      if (this.get('config').mapBy('name').contains(name)) {
-        this.get('newConfig').setProperties({
-          hasError: true,
-          messsage: Em.I18n.t('configs.add_property.name_exists')
-        });
-        return;
-      }
-      if (!/^[A-Za-z][A-Za-z0-9_\-\.]*$/.test(name)) {
-        this.get('newConfig').setProperties({
-          hasError: true,
-          messsage: Em.I18n.t('configs.add_property.invalid_name')
-        });
-        return;
-      }
-      this.get('config').pushObject(App.ConfigProperty.create({name: name, value: value, label: name}));
-      this.cleanNewConfig();
-      this.toggleProperty('buttonVisible');
-      Bootstrap.ModalManager.hide('addPropertyModal');
-    },
-
-    /**
-     * Hide "Add Property"-form
-     * @method discard
-     */
-    discard: function() {
-      this.cleanNewConfig();
-      this.toggleProperty('buttonVisible');
-    }
-  }
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/config/app.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/config/app.js b/contrib/views/slider/src/main/resources/ui/app/config/app.js
deleted file mode 100755
index 8af3d3e..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/config/app.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-var config = {
-  LOG_TRANSITIONS: true,
-  LOG_TRANSITIONS_INTERNAL: false,
-  rootElement: window.QUnit ? '#qunit-fixture' : 'body'
-};
-
-module.exports = Ember.Application.createWithMixins(Bootstrap, config);

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/config/env.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/config/env.js b/contrib/views/slider/src/main/resources/ui/app/config/env.js
deleted file mode 100644
index 363ce0e..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/config/env.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-module.exports = (function() {
-  var envObject = {};
-  var moduleNames = window.require.list().filter(function(module) {
-    return new RegExp('^envs/').test(module);
-  });
-
-  moduleNames.forEach(function(module) {
-    var key = module.split('/').reverse()[0];
-    envObject[key] = require(module);
-  });
-
-  return envObject;
-}());

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/config/router.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/config/router.js b/contrib/views/slider/src/main/resources/ui/app/config/router.js
deleted file mode 100755
index 2a1825a..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/config/router.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-module.exports = App.Router.map(function () {
-  this.resource("slider_apps", { path: "/" }, function () {
-    this.resource('createAppWizard', function(){
-      this.route('step1');
-      this.route('step2');
-      this.route('step3');
-      this.route('step4');
-    });
-  });
-  this.resource('slider_app', { path: 'apps/:slider_app_id' }, function() {
-    this.route('configs');
-    this.route('summary');
-  });
-});
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/config/store.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/config/store.js b/contrib/views/slider/src/main/resources/ui/app/config/store.js
deleted file mode 100755
index a77aaf4..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/config/store.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-module.exports = App.Store = DS.Store.extend({
-  revision: 13
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/controllers/.gitkeep
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/controllers/.gitkeep b/contrib/views/slider/src/main/resources/ui/app/controllers/.gitkeep
deleted file mode 100755
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/controllers/application_controller.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/controllers/application_controller.js b/contrib/views/slider/src/main/resources/ui/app/controllers/application_controller.js
deleted file mode 100644
index 7b5e025..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/controllers/application_controller.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.ApplicationController = Ember.Controller.extend({
-
-  /**
-   * Determines if Slider View instance has any configuration errors
-   * @type {boolean}
-   */
-  hasConfigErrors: false
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step1_controller.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step1_controller.js b/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step1_controller.js
deleted file mode 100644
index bcbb6cb..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step1_controller.js
+++ /dev/null
@@ -1,251 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.CreateAppWizardStep1Controller = Ember.Controller.extend(App.AjaxErrorHandler, {
-
-  needs: "createAppWizard",
-
-  appWizardController: Ember.computed.alias("controllers.createAppWizard"),
-
-  /**
-   * New App object
-   * @type {App.SliderApp}
-   */
-  newApp: null,
-
-  /**
-   * List of available types for App
-   * @type {Array}
-   */
-  availableTypes: [],
-
-  /**
-   * Selected type for new App
-   * @type {App.SliderAppType}
-   */
-  selectedType: null,
-
-  /**
-   * Define if <code>newAppName</code> pass validation
-   * @type {Boolean}
-   */
-  isNameError: false,
-
-  /**
-   * Error message describing App name validation error
-   * @type {String}
-   */
-  nameErrorMessage: '',
-
-  /**
-   * Define if <code>frequency</code> value is valid
-   * @type {Boolean}
-   */
-  isFrequencyError: false,
-
-  /**
-   * Error message describing frequency validation error
-   * @type {String}
-   */
-  frequencyErrorMessage: '',
-
-  /**
-   * Determines if request for validating new App name is sent
-   * If true - "Next" button should be disabled
-   * Set to false after request is finished
-   * @type {bool}
-   */
-  validateAppNameRequestExecuting: false,
-
-  /**
-   * Define if there are existing App types
-   * @type {Boolean}
-   */
-  isAppTypesError: Em.computed.equal('availableTypes.content.length', 0),
-
-  /**
-   * Define description depending on selected App type
-   * @type {string}
-   */
-  typeDescription: function () {
-    var selectedType = this.get('selectedType');
-    return selectedType ? Em.I18n.t('wizard.step1.typeDescription').format(selectedType.get('displayName')) : '';
-  }.property('selectedType'),
-
-  /**
-   * Define if submit button is disabled
-   * <code>newApp.name</code> should pass validation and be not empty
-   * @type {bool}
-   */
-  isSubmitDisabled: function () {
-    return this.get('validateAppNameRequestExecuting') || !this.get('newApp.name') || this.get('isNameError') ||
-      this.get('isFrequencyError') || this.get('isAppTypesError');
-  }.property('newApp.name', 'isNameError', 'isAppTypesError', 'validateAppNameRequestExecuting', 'isFrequencyError'),
-
-  /**
-   * Initialize new App and set it to <code>newApp</code>
-   * @method initializeNewApp
-   */
-  initializeNewApp: function () {
-    var app = this.get('appWizardController.newApp'),
-      properties = Em.A(['name', 'includeFilePatterns', 'excludeFilePatterns', 'frequency', 'queueName', 'specialLabel', 'selectedYarnLabel']),
-      newApp = Ember.Object.create({
-        appType: null,
-        twoWaySSLEnabled: false,
-        configs: {}
-      });
-
-    properties.forEach(function(p) {
-      newApp.set(p, '');
-    });
-    newApp.set('selectedYarnLabel', 0);
-
-    if (app) {
-      properties.forEach(function(p) {
-        newApp.set(p, app.get(p));
-      });
-    }
-
-    this.set('newApp', newApp);
-  },
-
-  /**
-   * Load all available types for App
-   * @method loadAvailableTypes
-   */
-  loadAvailableTypes: function () {
-    this.set('availableTypes', this.store.all('sliderAppType'));
-  },
-
-  /**
-   * Validate <code>newAppName</code>
-   * It should consist only of letters, numbers, '-', '_' and first character should be a letter
-   * @method nameValidator
-   * @return {Boolean}
-   */
-  nameValidator: function () {
-    var newAppName = this.get('newApp.name');
-    if (newAppName) {
-      // new App name should consist only of letters, numbers, '-', '_' and first character should be a letter
-      if (!/^[a-z][a-z0-9_-]*$/.test(newAppName)) {
-        this.set('isNameError', true);
-        this.set('nameErrorMessage', Em.I18n.t('wizard.step1.nameFormatError'));
-        return false;
-      }
-      // new App name should be unique
-      if (this.store.all('sliderApp').mapProperty('name').contains(newAppName)) {
-        this.set('isNameError', true);
-        this.set('nameErrorMessage', Em.I18n.t('wizard.step1.nameRepeatError'));
-        return false;
-      }
-    }
-    this.set('isNameError', false);
-    return true;
-  }.observes('newApp.name'),
-
-  /**
-   * Validate <code>frequency</code> value
-   * It should be numeric
-   * @method frequencyValidator
-   * @return {Boolean}
-   */
-  frequencyValidator: function () {
-    var frequency = this.get('newApp.frequency');
-    var isFrequencyError = frequency && /\D/.test(frequency);
-    this.setProperties({
-      isFrequencyError: isFrequencyError,
-      frequencyErrorMessage: isFrequencyError ? Em.I18n.t('wizard.step1.frequencyError') : ''
-    });
-    return !isFrequencyError;
-  }.observes('newApp.frequency'),
-
-  /**
-   * Proceed if app name has passed server validation
-   * @method {validateAppNameSuccessCallback}
-   */
-  validateAppNameSuccessCallback: function () {
-    var self = this;
-    Em.run(function () {
-      self.saveApp();
-      self.get('appWizardController').nextStep();
-    });
-  },
-
-  /**
-   * Proceed if app name has failed server validation
-   * @method {validateAppNameErrorCallback}
-   */
-  validateAppNameErrorCallback: function (request, ajaxOptions, error, opt, params) {
-    if (request.status == 409) {
-      Bootstrap.ModalManager.open(
-        'app-name-conflict',
-        Em.I18n.t('common.error'),
-        Em.View.extend({
-          classNames: ['alert', 'alert-danger'],
-          template: Em.Handlebars.compile(Em.I18n.t('wizard.step1.validateAppNameError').format(params.name))
-        }),
-        [
-          Em.Object.create({
-            title: Em.I18n.t('ok'),
-            dismiss: 'modal',
-            type: 'success'
-          })
-        ],
-        this
-      );
-    } else {
-      this.defaultErrorHandler(request, opt.url, opt.type, true);
-    }
-  },
-
-  /**
-   * Complete-callback for validating newAppName request
-   * @method validateAppNameCompleteCallback
-   */
-  validateAppNameCompleteCallback: function() {
-    this.set('validateAppNameRequestExecuting', false);
-  },
-
-  /**
-   * Save new application data to wizard controller
-   * @method saveApp
-   */
-  saveApp: function () {
-    var newApp = this.get('newApp');
-    newApp.set('appType', this.get('selectedType'));
-    newApp.set('configs', this.get('selectedType.configs'));
-    newApp.set('predefinedConfigNames', Em.keys(this.get('selectedType.configs')));
-    this.set('appWizardController.newApp', newApp);
-  },
-
-  actions: {
-    submit: function () {
-      this.set('validateAppNameRequestExecuting', true);
-      return App.ajax.send({
-        name: 'validateAppName',
-        sender: this,
-        data: {
-          name: this.get('newApp.name')
-        },
-        success: 'validateAppNameSuccessCallback',
-        error: 'validateAppNameErrorCallback',
-        complete: 'validateAppNameCompleteCallback'
-      });
-    }
-  }
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step2_controller.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step2_controller.js b/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step2_controller.js
deleted file mode 100644
index 181e81d..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step2_controller.js
+++ /dev/null
@@ -1,136 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.CreateAppWizardStep2Controller = Ember.ArrayController.extend({
-
-  needs: "createAppWizard",
-
-  appWizardController: Ember.computed.alias("controllers.createAppWizard"),
-
-  /**
-   * List of app type components
-   * @type {Em.Object[]}
-   * @see <code>loadTypeComponents</code> for information about elements type
-   */
-  content: [],
-
-  /**
-   * New App object
-   * @type {App.SliderApp}
-   */
-  newApp: null,
-
-  /**
-   * Validate all input fields are integer
-   * @type {Boolean}
-   */
-  isError: function () {
-    var result = false;
-    this.get('content').forEach(function (component) {
-      if (!result && (this.isNotInteger(component.get('numInstances')) || this.isNotInteger(component.get('yarnMemory')) || this.isNotInteger(component.get('yarnCPU')))) {
-        result = true;
-      }
-    }, this);
-    return result;
-  }.property('content.@each.numInstances', 'content.@each.yarnMemory', 'content.@each.yarnCPU'),
-
-  /**
-   * Define if submit button is disabled
-   * <code>isError</code> should be true
-   * @type {bool}
-   */
-  isSubmitDisabled: Em.computed.alias('isError'),
-
-  /**
-   * Initialize new App to use it scope of controller
-   * @method initializeNewApp
-   */
-  initializeNewApp: function () {
-    var newApp = this.get('appWizardController.newApp');
-    this.set('newApp', newApp);
-    this.loadTypeComponents();
-  },
-
-  /**
-   * @type {Em.Object}
-   */
-  typeComponent: Em.Object.extend({
-    yarnLabelChecked: false,
-    yarnLabelNotChecked: Em.computed.not('yarnLabelChecked'),
-    yarnLabel: ''
-  }),
-
-  /**
-   * Fill <code>content</code> with objects created from <code>App.SliderAppTypeComponent</code>
-   * If user come from 3 or 4 step, <code>newApp.components</code> are used
-   * @method loadTypeComponents
-   */
-  loadTypeComponents: function () {
-    var content = [],
-      component = this.get('typeComponent'),
-      allTypeComponents = this.get('newApp.appType.components'),
-      existingComponents = this.get('appWizardController.newApp.components'); // user may back to current step from 3 or 4
-    if (existingComponents && existingComponents.get('length')) {
-      this.set('content', existingComponents);
-    }
-    else {
-      if (allTypeComponents && allTypeComponents.get('length')) {
-        allTypeComponents.forEach(function (typeComponent) {
-          content.push(component.create({
-            displayName: typeComponent.get('displayName'),
-            name: typeComponent.get('name'),
-            priority: typeComponent.get('priority'),
-            numInstances: typeComponent.get('defaultNumInstances').toString(),
-            yarnMemory: typeComponent.get('defaultYARNMemory').toString(),
-            yarnCPU: typeComponent.get('defaultYARNCPU').toString()
-          }));
-        });
-        this.set('content', content);
-      }
-    }
-  },
-
-  /**
-   * Check if param is integer (and >= 0)
-   * @param {string} value value to check
-   * @return {Boolean}
-   * @method isNotInteger
-   */
-  isNotInteger: function (value) {
-    return !(value && value.trim().length && (value % 1 == 0) && value >= 0);
-  },
-
-  /**
-   * Save all data about components to <code>appWizardController.newApp.components</code>
-   * @method saveComponents
-   */
-  saveComponents: function () {
-    this.set('appWizardController.newApp.components', this.get('content'));
-  },
-
-  actions: {
-    /**
-     * Save data and proceed to the next step
-     * @method submit
-     */
-    submit: function () {
-      this.saveComponents();
-      this.get('appWizardController').nextStep();
-    }
-  }
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step3_controller.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step3_controller.js b/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step3_controller.js
deleted file mode 100644
index b01a927..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step3_controller.js
+++ /dev/null
@@ -1,250 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.CreateAppWizardStep3Controller = Ember.ObjectController.extend({
-
-  needs: "createAppWizard",
-
-  appWizardController: Ember.computed.alias("controllers.createAppWizard"),
-
-  newAppConfigs: Ember.computed.alias("appWizardController.newApp.configs"),
-
-  /**
-   * Configs entered in TextFields
-   * @type Array
-   */
-  configs: Em.A(),
-
-  /**
-   * predefined settings of configuration properties
-   */
-  configSettings: {
-    'site.global.metric_collector_host': {
-    },
-    'site.global.metric_collector_port': {
-    },
-    'site.global.metric_collector_lib': {
-    }
-  },
-
-  /**
-   * Convert configs to array of unique section names
-   * @type {Array}
-   */
-  sectionKeys: function () {
-    var configs = this.get('newAppConfigs') || {},
-      k = ["general"];
-
-    Object.keys(configs).forEach(function (key) {
-      if (key.split('.')[0] == "site") {
-        k.push(key.split('.')[1])
-      }
-    });
-    k.push('custom');
-    return k.uniq();
-  }.property('newAppConfigs'),
-
-  /**
-   * Defines if <code>configs</code> are properly key-value formatted
-   * @type {Boolean}
-   */
-  isError: false,
-
-  /**
-   * Config object converted from <code>configs</code>
-   * @type {Object}
-   */
-  configsObject: {},
-
-  /**
-   * config that describe configurations set
-   */
-  configsSet: [
-    {
-      name: 'ams_metrics',
-      trigger: {value: false, label: Em.I18n.t('configs.enable.metrics'), viewType: 'checkbox'},
-      isSet: true,
-      section: 'global',
-      configNames: ["site.global.metric_collector_host", "site.global.metric_collector_port", "site.global.metric_collector_lib"],
-      configs: [],
-      dependencies: []
-    }
-  ],
-
-  /**
-   * Load all data required for step
-   * @method loadStep
-   */
-  loadStep: function () {
-    this.clearStep();
-    this.initConfigs(true);
-  },
-
-  /**
-   * Format init value for <code>configs</code> property
-   * @param {bool} setDefaults
-   * @method initConfigs
-   */
-  initConfigs: function (setDefaults) {
-    var self = this,
-      newAppConfigs = this.get('newAppConfigs') || {},
-      defaultConfigs = self.get('appWizardController.newApp.appType.configs');
-      configs = Em.A(),
-      configsSet = $.extend(true, [], this.get('configsSet')),
-      allSetConfigs = {},
-      configSettings = this.get('configSettings');
-
-    configsSet.forEach(function (item) {
-      item.configNames.forEach(function (configName) {
-        allSetConfigs[configName] = item;
-        if(!newAppConfigs[configName] && defaultConfigs && defaultConfigs[configName]){
-          newAppConfigs[configName] = defaultConfigs[configName];
-        }
-      });
-    });
-
-    Object.keys(newAppConfigs).forEach(function (key) {
-      var label = (!!key.match('^site.')) ? key.substr(5) : key;
-      var configSetting = (configSettings[key]) ?
-        $.extend({name: key, value: newAppConfigs[key], label: label}, configSettings[key]) :
-        {name: key, value: newAppConfigs[key], label: label};
-
-      if (key === 'java_home' && !!setDefaults && App.get('javaHome')) {
-        configSetting.value = App.get('javaHome');
-      }
-
-      if (key === "site.global.metric_collector_host" && !!setDefaults && App.get('metricsHost')) {
-        configSetting.value = App.get('metricsHost');
-      }
-
-      if (key === "site.global.metric_collector_port" && !!setDefaults && App.get('metricsPort')) {
-        configSetting.value = App.get('metricsPort');
-      }
-
-      if (key === "site.global.metric_collector_lib" && !!setDefaults && App.get('metricsLibPath')) {
-        configSetting.value = App.get('metricsLibPath');
-      }
-
-      if (allSetConfigs[key]) {
-        allSetConfigs[key].configs.push(App.ConfigProperty.create(configSetting));
-      } else {
-        configs.push(App.ConfigProperty.create(configSetting));
-      }
-    });
-
-    configsSet.forEach(function (configSet) {
-      if (configSet.configs.length === configSet.configNames.length) {
-        delete configSet.configNames;
-        configSet.trigger = App.ConfigProperty.create(configSet.trigger);
-        this.initConfigSetDependencies(configSet);
-        configs.unshift(configSet);
-      }
-    }, this);
-
-    this.set('configs', configs);
-  },
-
-  /**
-   * initialize dependencies map for config set by name
-   * configSet map changed by reference
-   *
-   * @param {object} configSet
-   * @method initConfigSetDependencies
-   */
-  initConfigSetDependencies: function (configSet) {
-    configSet.dependencies.forEach(function (item) {
-      item.map = Em.get(item.name);
-    });
-  },
-
-  /**
-   * Clear all initial data
-   * @method clearStep
-   */
-  clearStep: function () {
-    this.set('isError', false);
-  },
-
-  /**
-   * Validate <code>configs</code> to be key-value formatted amd convert it to object
-   * @return {Boolean}
-   * @method validateConfigs
-   */
-  validateConfigs: function () {
-    var self = this,
-      result = true,
-      configs = this.addConfigSetProperties(this.get('configs')),
-      configsObject = {};
-
-    try {
-      configs.forEach(function (item) {
-        configsObject[item.name] = item.value;
-      });
-      self.set('configsObject', configsObject);
-    } catch (e) {
-      self.set('isError', true);
-      result = false;
-    }
-    return result;
-  },
-
-  /**
-   * add config properties from config sets to general configs array
-   * @param configs
-   * @return {Array}
-   */
-  addConfigSetProperties: function (configs) {
-    var newConfigs = [];
-    configs.filterBy('isSet').forEach(function (item) {
-      if (item.trigger.value) {
-        newConfigs.pushObjects(item.configs);
-      }
-    });
-    return configs.filterBy('isSet', false).concat(newConfigs);
-  },
-
-  /**
-   * Save converted configs to new App configs
-   * @method saveConfigs
-   */
-  saveConfigs: function () {
-    var configsToSet = this.get('configsObject');
-    if (configsToSet['site.global.metrics_enabled']!=null) {
-      if (configsToSet['site.global.metric_collector_host']!=null &&
-          configsToSet['site.global.metric_collector_port']!=null) {
-        configsToSet['site.global.metrics_enabled'] = "true";
-      } else {
-        configsToSet['site.global.metrics_enabled'] = "false";
-      }
-    }
-    this.set('newAppConfigs', configsToSet);
-  },
-
-  actions: {
-
-    /**
-     * If <code>configs</code> is valid, than save it and proceed to the next step
-     */
-    submit: function () {
-      if (this.validateConfigs()) {
-        this.saveConfigs();
-        this.get('appWizardController').nextStep();
-      }
-    }
-  }
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step4_controller.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step4_controller.js b/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step4_controller.js
deleted file mode 100644
index 79dc4ba..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step4_controller.js
+++ /dev/null
@@ -1,176 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.CreateAppWizardStep4Controller = Ember.ObjectController.extend(App.AjaxErrorHandler, {
-
-  needs: "createAppWizard",
-
-  appWizardController: Ember.computed.alias("controllers.createAppWizard"),
-
-  /**
-   * New App object
-   * @type {App.SliderApp}
-   */
-  newApp: null,
-
-  /**
-   * Define if submit button is disabled
-   * @type {Boolean}
-   */
-  isSubmitDisabled: false,
-
-  /**
-   * Return formatted configs to show them on preview page
-   * @return {String}
-   */
-  configsFormatted: function () {
-    var result = '';
-    var configs = this.get('newApp.configs');
-    if (configs) {
-      result = JSON.stringify(configs);
-      result = result.substring(1, result.length - 1);
-      result = result.replace(/",/g, '",\n');
-    }
-    return result;
-  }.property('newApp.configs'),
-
-  /**
-   * Return formatted object to send it in request to server
-   * @type {Object[]}
-   */
-  resourcesFormatted: function () {
-    var resources = {};
-    var newApp = this.get('newApp');
-    // Log Aggregation
-    var includeFilePatterns = newApp.get('includeFilePatterns');
-    var excludeFilePatterns = newApp.get('excludeFilePatterns');
-    var frequency = newApp.get('frequency');
-    if ((includeFilePatterns != null && includeFilePatterns.trim().length > 0)
-        || (excludeFilePatterns != null && excludeFilePatterns.trim().length > 0)
-        || (frequency != null && frequency.trim().length > 0)) {
-      resources.global = {
-        "yarn.log.include.patterns": includeFilePatterns,
-        "yarn.log.exclude.patterns": excludeFilePatterns,
-        "yarn.log.interval": frequency
-      };
-    }
-    // Components
-    resources.components = newApp.get('components').map(function (component) {
-      var componentObj = {
-        'id': component.get('name'),
-        'instanceCount': component.get('numInstances'),
-        'yarnMemory': component.get('yarnMemory'),
-        'yarnCpuCores': component.get('yarnCPU'),
-        'priority': component.get('priority')
-      };
-      if (component.get('yarnLabelChecked')) {
-        componentObj.yarnLabel = component.get('yarnLabel') == null ? ""
-            : component.get('yarnLabel').trim();
-      }
-      return componentObj;
-    });
-    // YARN Labels
-    var yarnLabelOption = newApp.get('selectedYarnLabel');
-    if (yarnLabelOption > 0) {
-      // 1=empty label. 2=specific label
-      var label = "";
-      if (yarnLabelOption == 2) {
-        label = newApp.get('specialLabel');
-      }
-      resources.components.push({
-        'id': 'slider-appmaster',
-        'yarn.label.expression': label
-      });
-    }
-    return resources;
-  }.property('newApp.components.@each.numInstances', 'newApp.components.@each.yarnMemory', 'newApp.components.@each.yarnCPU', 'newApp.components.@each.priority', 'newApp.components.@each.yarnLabelChecked', 'newApp.components.@each.yarnLabel'),
-
-  /**
-   * Load all required data for step
-   * @method loadStep
-   */
-  loadStep: function () {
-    this.initializeNewApp();
-  },
-
-  /**
-   * Initialize new App to use it scope of controller
-   * @method initializeNewApp
-   */
-  initializeNewApp: function () {
-    var newApp = this.get('appWizardController.newApp');
-    this.set('newApp', newApp);
-  },
-
-  /**
-   * Send request to server to deploy new App
-   * @return {$.ajax}
-   * @method sendAppDataToServer
-   */
-  sendAppDataToServer: function () {
-    var app = this.get('newApp');
-    var dataObj = {
-      typeName: app.get('appType.index'),
-      typeVersion: app.get('appType.version'),
-      name: app.get('name'),
-      twoWaySSLEnabled: app.get('twoWaySSLEnabled') + "",
-      resources: this.get('resourcesFormatted'),
-      typeConfigs: app.get('configs')
-    };
-    if (app.queueName != null && app.queueName.trim().length > 0) {
-      dataObj.queue = app.queueName.trim();
-    }
-    this.set('isSubmitDisabled', true);
-    return App.ajax.send({
-      name: 'createNewApp',
-      sender: this,
-      data: {
-        data: dataObj
-      },
-      success: 'sendAppDataToServerSuccessCallback',
-      complete: 'sendAppDataToServerCompleteCallback'
-    });
-  },
-
-  /**
-   * Success-callback for "create new app"-request
-   * @method sendAppDataToServerSuccessCallback
-   */
-  sendAppDataToServerSuccessCallback: function() {
-    this.get('appWizardController').hidePopup();
-  },
-
-  /**
-   * Complete-callback for "create new app"-request
-   * @method sendAppDataToServerCompleteCallback
-   */
-  sendAppDataToServerCompleteCallback: function () {
-    this.set('isSubmitDisabled', false);
-  },
-
-  actions: {
-
-    /**
-     * Onclick handler for finish button
-     * @method finish
-     */
-    finish: function () {
-      this.sendAppDataToServer();
-    }
-  }
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/controllers/create_app_wizard_controller.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/controllers/create_app_wizard_controller.js b/contrib/views/slider/src/main/resources/ui/app/controllers/create_app_wizard_controller.js
deleted file mode 100644
index ee46ee6..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/controllers/create_app_wizard_controller.js
+++ /dev/null
@@ -1,122 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.CreateAppWizardController = Ember.ObjectController.extend({
-
-  /**
-   * New app created via current wizard
-   * Populated with data step by step
-   * @type {object|null}
-   */
-  newApp: null,
-
-  /**
-   * Current step number
-   * @type {number}
-   */
-  currentStep: 1,
-
-  /**
-   * Overall steps count
-   * @type {number}
-   */
-  TOTAL_STEPS_NUMBER: 4,
-
-  /**
-   * Init controller's data
-   * @method loadStep
-   */
-  loadStep: function () {
-    this.set('currentStep', 1);
-    this.gotoStep(this.get('currentStep'));
-  },
-
-  /**
-   * Proceed user to selected step
-   * @param {number} step step's number
-   * @param {bool} fromNextButton is user came from "Next"-button click
-   * @method gotoStep
-   */
-  gotoStep: function (step, fromNextButton) {
-    if (step > this.get('TOTAL_STEPS_NUMBER') || step < 1 || (!fromNextButton && step > this.get('currentStep'))) {
-      return;
-    }
-    this.set('currentStep', step);
-
-    if (step == 1) {
-      this.dropCustomConfigs();
-    }
-    this.transitionToRoute('createAppWizard.step' + step);
-  },
-
-  /**
-   * Custom configs added by used should be dropped if user come back to the 1st step
-   * @method dropCustomConfigs
-   */
-  dropCustomConfigs: function() {
-    var configs = this.get('newApp.configs'),
-      predefined = this.get('newApp.predefinedConfigNames'),
-      filtered = {};
-    if (!configs) return;
-    Em.keys(configs).forEach(function(name) {
-      if (predefined.contains(name)) {
-        filtered[name] = configs[name];
-      }
-    });
-    this.set('newApp.configs', filtered);
-  },
-
-  /**
-   * Proceed user no next step
-   * @method nextStep
-   */
-  nextStep: function () {
-    this.gotoStep(this.get('currentStep') + 1, true);
-  },
-
-  /**
-   * Proceed user to prev step
-   * @method prevStep
-   */
-  prevStep: function () {
-    this.gotoStep(this.get('currentStep') - 1);
-  },
-
-  /**
-   * Hide wizard-popup
-   * @method hidePopup
-   */
-  hidePopup: function () {
-    $('#createAppWizard').hide();
-    this.set('newApp', null);
-    this.transitionToRoute('slider_apps');
-  },
-
-  actions: {
-
-    /**
-     * Proceed user to selected step
-     * @param {number} step step's number
-     * @method gotoStep
-     */
-    gotoStep: function (step) {
-      this.gotoStep(step);
-    }
-  }
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app/summary_controller.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app/summary_controller.js b/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app/summary_controller.js
deleted file mode 100644
index d9a4a4a..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app/summary_controller.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.SliderAppSummaryController = Ember.Controller.extend({
-
-  /**
-   * Alias for model-displayName
-   * @type {string}
-   */
-  appType: Em.computed.alias('model.appType.displayName')
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app_controller.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app_controller.js b/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app_controller.js
deleted file mode 100644
index bdebf13..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app_controller.js
+++ /dev/null
@@ -1,472 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.SliderAppController = Ember.ObjectController.extend(App.AjaxErrorHandler, {
-
-  /**
-   * List of Slider App tabs
-   * @type {{title: string, linkTo: string}[]}
-   */
-  sliderAppTabs: function () {
-    var configs = this.get("model.configs");
-    var tabs = Ember.A([
-      Ember.Object.create({title: Ember.I18n.t('common.summary'), linkTo: 'slider_app.summary'})
-    ]);
-    if(typeof configs == "object" && Object.keys(configs).length > 0){
-      tabs.pushObject(Ember.Object.create({title: Ember.I18n.t('common.configs'), linkTo: 'slider_app.configs'}));
-    }
-    return tabs;
-  }.property('model.configs'),
-
-  /**
-   * Do we have quicklinks ?
-   * @type {bool}
-   */
-  weHaveQuicklinks: function () {
-    return (Em.get(this.get('model'), 'quickLinks.content.content.length') > 0);
-  }.property('model.quickLinks.content.content.length'),
-
-  /**
-   * Quick links in custom order.
-   *
-   * @type {Array}
-   **/
-  quickLinksOrdered: function() {
-    var copy = this.get('model.quickLinks').slice(0);
-    var toTail = ['Metrics UI', 'Metrics API'];
-
-    if (this.get('weHaveQuicklinks')) {
-      toTail.forEach(function(labelName) {
-        if (copy.findBy('label', labelName)) {
-          copy = copy.concat(copy.splice(copy.indexOf(copy.findBy('label', labelName)), 1));
-        }
-      });
-    }
-    return copy;
-  }.property('model.quickLinks.content.content.length', 'weHaveQuicklinks'),
-
-  /**
-   * List of all possible actions for slider app
-   * @type {Em.Object}
-   */
-  appActions: Em.Object.create({
-    stop: {
-      title: 'Stop',
-      action: 'freeze',
-      confirm: true
-    },
-    flex: {
-      title: 'Flex',
-      action: 'flex',
-      confirm: false
-    },
-    destroy: {
-      title: 'Destroy',
-      action: 'destroy',
-      customConfirm: 'confirmDestroy'
-    },
-    start: {
-      title: 'Start',
-      action: 'thaw',
-      confirm: false
-    }
-  }),
-
-  /**
-   * map of available action for slider app according to its status
-   * key - status, value - list of actions
-   * @type {Em.Object}
-   */
-  statusActionsMap: Em.Object.create({
-    NEW: ['stop'],
-    NEW_SAVING: ['stop'],
-    ACCEPTED: ['stop'],
-    RUNNING: ['stop', 'flex'],
-    FINISHED: ['start', 'destroy'],
-    FAILED: ['destroy'],
-    KILLED: ['destroy'],
-    FROZEN: ['start', 'destroy']
-  }),
-
-  /**
-   * List of available for model actions
-   * Based on <code>model.status</code>
-   * @type {Ember.Object[]}
-   */
-  availableActions: function() {
-    var actions = Em.A([]),
-      advanced = Em.A([]),
-      appActions = this.get('appActions'),
-      statusActionsMap = this.get('statusActionsMap'),
-      status = this.get('model.status');
-
-    if (this.get('model.isActionFinished')) this.get('model').set('isActionPerformed', false);
-    statusActionsMap[status].forEach(function(action) {
-      if ('destroy' === action) {
-        advanced.pushObject(appActions[action]);
-      }
-      else {
-        actions.pushObject(appActions[action]);
-      }
-    });
-
-    if (advanced.length) {
-      actions.pushObject({
-        title: 'Advanced',
-        submenu: advanced
-      });
-    }
-    return actions;
-  }.property('model.status'),
-
-  /**
-   * Checkbox in the destroy-modal
-   * If true - enable "Destroy"-button
-   * @type {bool}
-   */
-  confirmChecked: false,
-
-  /**
-   * Inverted <code>confirmChecked</code>-value
-   * Used in <code>App.DestroyAppPopupFooterView</code> to enable "Destroy"-button
-   * @type {bool}
-   */
-  destroyButtonEnabled: Ember.computed.not('confirmChecked'),
-
-  /**
-   * Method's name that should be called for model
-   * @type {string}
-   */
-  currentAction: null,
-
-  /**
-   * Grouped components by name
-   * @type {{name: string, count: number}[]}
-   */
-  groupedComponents: [],
-
-  /**
-   * Does new instance counts are invalid
-   * @type {bool}
-   */
-  groupedComponentsHaveErrors: false,
-
-  /**
-   * Custom popup for "Destroy"-action
-   * @method destroyConfirm
-   */
-  confirmDestroy: function() {
-    var modalComponent = this.container.lookup('component-lookup:main').
-      lookupFactory('bs-modal', this.get('container')).create();
-    modalComponent.setProperties({
-      name: 'confirm-modal',
-      title: Ember.I18n.t('sliderApp.destroy.confirm.title'),
-      manual: true,
-      targetObject: this,
-      body: App.DestroyAppPopupView,
-      controller: this,
-      footerViews: [App.DestroyAppPopupFooterView]
-    });
-    Bootstrap.ModalManager.register('confirm-modal', modalComponent);
-  },
-
-  /**
-   * Try call controller's method with name stored in <code>currentAction</code>
-   * @method tryDoAction
-   */
-  tryDoAction: function() {
-    var currentAction = this.get('currentAction');
-    if (Em.isNone(currentAction)) return;
-    if(Em.typeOf(this[currentAction]) !== 'function') return;
-    this[currentAction]();
-  },
-
-  /**
-   * Do request to <strong>thaw</strong> current slider's app
-   * @returns {$.ajax}
-   * @method freeze
-   */
-  thaw: function() {
-    var model = this.get('model');
-    this.setStartAction();
-    return App.ajax.send({
-      name: 'changeAppState',
-      sender: this,
-      data: {
-        id: model.get('id'),
-        data: {
-          id: model.get('id'),
-          name: model.get('name'),
-          state: "RUNNING"
-        }
-      },
-      success: 'thawSuccessCallback',
-      error: 'actionErrorCallback'
-    });
-  },
-
-  /**
-   * Redirect to Slider Apps Table page on successful thawing
-   * @method thawSuccessCallback
-   */
-  thawSuccessCallback: function () {
-    this.transitionToRoute('slider_apps.index');
-  },
-
-  /**
-   * Do request to <strong>freeze</strong> current slider's app
-   * @returns {$.ajax}
-   * @method freeze
-   */
-  freeze: function() {
-    var model = this.get('model');
-    this.setStartAction();
-    return App.ajax.send({
-      name: 'changeAppState',
-      sender: this,
-      data: {
-        id: model.get('id'),
-        data: {
-          id: model.get('id'),
-          name: model.get('name'),
-          state: "FROZEN"
-        }
-      },
-      error: 'actionErrorCallback'
-    });
-  },
-
-  /**
-   * Group components by <code>componentName</code> and save them to <code>groupedComponents</code>
-   * @method groupComponents
-   */
-  groupComponents: function() {
-    var groupedComponents = this.get('appType.components').map(function(c) {
-      return {
-        name: c.get('name'),
-        count: 0
-      };
-    });
-
-    this.get('components').forEach(function(component) {
-      var name = component.get('componentName'),
-        group = groupedComponents.findBy('name', name);
-      if (group) {
-        group.count++;
-      }
-    });
-    this.set('groupedComponents', groupedComponents);
-  },
-
-  /**
-   * Validate new instance counts for components (should be integer and >= 0)
-   * @method validateGroupedComponents
-   * @returns {boolean}
-   */
-  validateGroupedComponents: function() {
-    var hasErrors = false;
-    this.get('groupedComponents').forEach(function(c) {
-      if (!/^\d+$/.test(c.count)) {
-        hasErrors = true;
-        return;
-      }
-      var count = parseInt(c.count + 0);
-      if (count < 0) {
-        hasErrors = true;
-      }
-    });
-    this.set('groupedComponentsHaveErrors', hasErrors);
-    return hasErrors;
-  },
-
-  /**
-   * Do request to <strong>flex</strong> current slider's app
-   * @method flex
-   */
-  flex: function() {
-    this.groupComponents();
-    Bootstrap.ModalManager.open(
-      'flex-popup',
-      'Flex',
-      'slider_app/flex_popup',
-      Em.A([
-        Ember.Object.create({title: Em.I18n.t('common.cancel'), clicked:"closeFlex", dismiss: 'modal'}),
-        Ember.Object.create({title: Em.I18n.t('common.save'), clicked:"submitFlex", type:'success'})
-      ]),
-      this
-    );
-  },
-
-  /**
-   * Map <code>model.components</code> for Flex request
-   * Output format:
-   * <code>
-   *   {
-   *      COMPONENT_NAME_1: {
-   *        instanceCount: 1
-   *      },
-   *      COMPONENT_NAME_2: {
-   *        instanceCount: 2
-   *      },
-   *      ....
-   *   }
-   * </code>
-   * @returns {object}
-   * @method mapComponentsForFlexRequest
-   */
-  mapComponentsForFlexRequest: function() {
-    var components = {};
-    this.get('groupedComponents').forEach(function(component) {
-      components[Em.get(component, 'name')] = {
-        instanceCount: Em.get(component, 'count')
-      }
-    });
-    return components;
-  },
-
-  /**
-   * Do request to <strong>delete</strong> current slider's app
-   * @return {$.ajax}
-   * @method destroy
-   */
-  destroy: function() {
-    this.setStartAction();
-    return App.ajax.send({
-      name: 'destroyApp',
-      sender: this,
-      data: {
-        model: this.get('model'),
-        id: this.get('model.id')
-      },
-      success: 'destroySuccessCallback',
-      error: 'actionErrorCallback'
-    });
-  },
-
-  /**
-   * Complete-callback for "destroy app"-request
-   * @method destroyCompleteCallback
-   */
-  destroySuccessCallback: function(data, opt, params) {
-    params.model.deleteRecord();
-    this.store.dematerializeRecord(params.model);
-    this.transitionToRoute('slider_apps');
-  },
-
-  actionErrorCallback: function() {
-    this.defaultErrorHandler(arguments[0], arguments[3].url, arguments[3].type, true);
-    this.get('model').set('isActionPerformed', false);
-  },
-
-  actions: {
-
-    /**
-     * Submit new instance counts for app components
-     * @method submitFlex
-     * @returns {*}
-     */
-    submitFlex: function() {
-      if (this.validateGroupedComponents()) return;
-      var model = this.get('model'),
-        components = this.mapComponentsForFlexRequest();
-      this.get('groupedComponents').clear();
-      this.set('groupedComponentsHaveErrors', false);
-      Bootstrap.ModalManager.close('flex-popup');
-      return App.ajax.send({
-        name: 'flexApp',
-        sender: this,
-        data: {
-          id: model.get('id'),
-          data: {
-            id: model.get('id'),
-            name: model.get('name'),
-            components: components
-          }
-        }
-      });
-    },
-
-    /**
-     * Close flex-popup
-     * @method closeFlex
-     */
-    closeFlex: function() {
-      this.get('groupedComponents').clear();
-      this.set('groupedComponentsHaveErrors', false);
-    },
-
-    /**
-     * Handler for "Yes" click in modal popup
-     * @returns {*}
-     * @method modalConfirmed
-     */
-    modalConfirmed: function() {
-      this.tryDoAction();
-      this.set('confirmChecked', false);
-      return Bootstrap.ModalManager.close('confirm-modal');
-    },
-
-    /**
-     * Handler for "No" click in modal popup
-     * @returns {*}
-     * @method modalCanceled
-     */
-    modalCanceled: function() {
-      this.set('confirmChecked', false);
-      return Bootstrap.ModalManager.close('confirm-modal');
-    },
-
-    /**
-     * Handler for Actions menu elements click
-     * @param {{title: string, action: string, confirm: bool}} option
-     * @method openModal
-     */
-    openModal: function(option) {
-      if (!option.action) return false;
-      this.set('currentAction', option.action);
-      if (!Em.isNone(option.customConfirm) && Ember.typeOf(this.get(option.customConfirm)) === 'function') {
-        this[option.customConfirm]();
-      }
-      else {
-        if (option.confirm) {
-          Bootstrap.ModalManager.open(
-            "confirm-modal",
-            Ember.I18n.t('common.confirmation'),
-            Ember.View.extend({
-              template: Ember.Handlebars.compile('{{t question.sure}}')
-            }),
-            [
-              Ember.Object.create({title: Em.I18n.t('common.cancel'), clicked:"modalCanceled", dismiss: 'modal'}),
-              Ember.Object.create({title: Em.I18n.t('ok'), clicked:"modalConfirmed", type:'success'})
-            ],
-            this
-          );
-        }
-        else {
-          this.tryDoAction();
-        }
-      }
-    }
-  },
-
-  setStartAction: function() {
-    this.get('model').set('isActionPerformed' , true);
-    this.get('model').set('statusBeforeAction' , this.get('model.status'));
-  }
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/controllers/slider_apps_controller.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/controllers/slider_apps_controller.js b/contrib/views/slider/src/main/resources/ui/app/controllers/slider_apps_controller.js
deleted file mode 100644
index 923e9f6..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/controllers/slider_apps_controller.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.SliderAppsController = Ember.ArrayController.extend({
-  /**
-   * show modal popup that says apps currently unavailable
-   */
-  showUnavailableAppsPopup: function(message) {
-    this.set('errorMessage', message || Em.I18n.t('slider.apps.undefined.issue'));
-    Bootstrap.ModalManager.open(
-      "apps-warning-modal",
-      Em.I18n.t('common.warning'),
-      'unavailable_apps',
-      [
-        Ember.Object.create({title: Em.I18n.t('ok'), dismiss: 'modal'})
-      ],
-      this
-    );
-  }
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/controllers/slider_controller.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/controllers/slider_controller.js b/contrib/views/slider/src/main/resources/ui/app/controllers/slider_controller.js
deleted file mode 100644
index 6e2590d..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/controllers/slider_controller.js
+++ /dev/null
@@ -1,138 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Load Slider-properties.
- * After this set <code>App.sliderConfig</code>-models and enable/disable Slider
- * @type {Ember.Controller}
- */
-App.SliderController = Ember.Controller.extend(App.RunPeriodically, {
-
-  /**
-   *  Load resources on controller initialization
-   * @method initResources
-   */
-  initResources: function () {
-    this.getParametersFromViewProperties();
-  },
-
-  /**
-   * Load Slider display information
-   * @returns {$.ajax}
-   * @method getViewDisplayParameters
-   */
-  getViewDisplayParameters: function() {
-    return App.ajax.send({
-      name: 'slider.getViewParams',
-      sender: this,
-      success: 'getViewDisplayParametersSuccessCallback'
-    });
-  },
-
-  /**
-   * Accessing /resources/status initializes the view internals
-   * with the latest configs. This will help the view in staying
-   * updated and recover from previous config issues.
-   */
-  touchViewStatus: function() {
-    return App.ajax.send({
-      name: 'slider.getViewParams.v2',
-      sender: this
-    });
-  },
-
-  /**
-   * Set Slider label and description to <code>App</code> properties
-   * @param {object} data
-   * @method getViewDisplayParametersSuccessCallback
-   */
-  getViewDisplayParametersSuccessCallback: function(data) {
-    App.set('description', Em.get(data, 'ViewInstanceInfo.description'));
-    App.set('label', Em.get(data, 'ViewInstanceInfo.label'));
-    App.set('javaHome', Em.get(data, 'ViewInstanceInfo.instance_data') && Em.get(data, 'ViewInstanceInfo.instance_data')['java.home']);
-    App.set('sliderUser', Em.get(data, 'ViewInstanceInfo.instance_data') && Em.get(data, 'ViewInstanceInfo.instance_data')['slider.user']);
-  },
-
-  /**
-   * Get Slider properties from View-parameters (set in the Ambari Admin View)
-   * If parameters can't be found, use Ambari-configs to populate Slider properties
-   * @returns {$.ajax}
-   * @method getParametersFromViewProperties
-   */
-  getParametersFromViewProperties: function () {
-    return App.ajax.send({
-      name: 'slider.getViewParams.v2',
-      sender: this,
-      success: 'getParametersFromViewPropertiesSuccessCallback'
-    });
-  },
-
-  /**
-   * Check if Slider-properties exist
-   * If exist - set Slider properties using view-configs
-   * If not - get Ambari configs to populate Slider properties
-   * @param {object} data
-   * @method getParametersFromViewPropertiesSuccessCallback
-   */
-  getParametersFromViewPropertiesSuccessCallback: function (data) {
-    var properties = Em.get(data, 'parameters'),
-      sliderConfigs = App.SliderApp.store.all('sliderConfig');
-    sliderConfigs.forEach(function (model) {
-      var key = model.get('viewConfigName');
-      model.set('value', properties[key]);
-    });
-    if (properties['view.slider.user'] != null
-        && properties['view.slider.user'] != App.get('sliderUser')) {
-      App.set('sliderUser', properties['view.slider.user']);
-    }
-    if (properties['java.home'] != null
-        && properties['java.home'] != App.get('javaHome')) {
-      App.set('javaHome', properties['java.home']);
-    }
-    this.initMetricsServerProperties();
-    this.finishSliderConfiguration(data);
-  },
-
-  /**
-   * initialize properties of Metrics Server that are required by Slider View
-   * @method initMetricsServerProperties
-   */
-  initMetricsServerProperties: function () {
-    var sliderConfigs = App.SliderApp.store.all('sliderConfig'),
-      metricsPort = sliderConfigs.findBy('viewConfigName', 'site.global.metric_collector_port'),
-      metricsHost = sliderConfigs.findBy('viewConfigName', 'site.global.metric_collector_host'),
-      metricsLibPath = sliderConfigs.findBy('viewConfigName', 'site.global.metric_collector_lib');
-    App.set('metricsHost', metricsHost.get('value'));
-    App.set('metricsPort', metricsPort.get('value'));
-    App.set('metricsLibPath', metricsLibPath.get('value'));
-  },
-
-  /**
-   * After all Slider-configs are loaded, application should check self status
-   * @param {object} data - received from server information about current Slider-status
-   * @method finishSliderConfiguration
-   */
-  finishSliderConfiguration: function (data) {
-    App.setProperties({
-      viewErrors: data.validations,
-      viewEnabled: data.validations.length === 0,
-      mapperTime: new Date().getTime()
-    });
-  }
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/controllers/tooltip_controller.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/controllers/tooltip_controller.js b/contrib/views/slider/src/main/resources/ui/app/controllers/tooltip_controller.js
deleted file mode 100644
index fb85a88..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/controllers/tooltip_controller.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-App.TooltipBoxController = Bootstrap.TooltipBoxController;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/helpers/.gitkeep
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/helpers/.gitkeep b/contrib/views/slider/src/main/resources/ui/app/helpers/.gitkeep
deleted file mode 100755
index e69de29..0000000


[41/42] ambari git commit: AMBARI-21298. Pausing An Upgrade In Progress Does Not Resume PENDING Tasks (dlysnichenko)

Posted by rl...@apache.org.
AMBARI-21298. Pausing An Upgrade In Progress Does Not Resume PENDING Tasks (dlysnichenko)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/0dbc7976
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/0dbc7976
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/0dbc7976

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 0dbc7976d95dd0bb25232a4fc4d204e55929eb9a
Parents: ec8deeb
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Fri Jun 23 11:21:03 2017 +0300
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Fri Jun 23 11:24:36 2017 +0300

----------------------------------------------------------------------
 .../server/actionmanager/ActionDBAccessorImpl.java | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/0dbc7976/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
index 94bb892..f0e2ce7 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
@@ -23,9 +23,11 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.EnumSet;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.ambari.annotations.Experimental;
@@ -814,7 +816,15 @@ public class ActionDBAccessorImpl implements ActionDBAccessor {
   @Override
   public void resubmitTasks(List<Long> taskIds) {
     List<HostRoleCommandEntity> tasks = hostRoleCommandDAO.findByPKs(taskIds);
+    Set<RequestEntity> requestEntities = new HashSet<>();
+    Set<StageEntity> stageEntities = new HashSet<>();
     for (HostRoleCommandEntity task : tasks) {
+      StageEntity stage = task.getStage();
+      stage.setStatus(HostRoleStatus.PENDING);
+      stageEntities.add(stage);
+      RequestEntity request = stage.getRequest();
+      request.setStatus(HostRoleStatus.IN_PROGRESS);
+      requestEntities.add(request);
       task.setStatus(HostRoleStatus.PENDING);
       // TODO HACK, shouldn't reset start time.
       // Because it expects -1, RetryActionMonitor.java also had to set it to -1.
@@ -824,6 +834,13 @@ public class ActionDBAccessorImpl implements ActionDBAccessor {
       auditLog(task, task.getRequestId());
     }
 
+    for (StageEntity stageEntity : stageEntities) {
+      stageDAO.merge(stageEntity);
+    }
+    for (RequestEntity requestEntity : requestEntities) {
+      requestDAO.merge(requestEntity);
+    }
+
     // no need to merge if there's nothing to merge
     if (!tasks.isEmpty()) {
       hostRoleCommandDAO.mergeAll(tasks);


[09/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/production/ember.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/production/ember.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/production/ember.js
deleted file mode 100644
index 043755d..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/production/ember.js
+++ /dev/null
@@ -1,41620 +0,0 @@
-/*!
- * @overview  Ember - JavaScript Application Framework
- * @copyright Copyright 2011-2014 Tilde Inc. and contributors
- *            Portions Copyright 2006-2011 Strobe Inc.
- *            Portions Copyright 2008-2011 Apple Inc. All rights reserved.
- * @license   Licensed under MIT license
- *            See https://raw.github.com/emberjs/ember.js/master/LICENSE
- * @version   1.5.1+pre.ff8c6bbb
- */
-
-
-(function() {
-var define, requireModule, require, requirejs;
-
-(function() {
-  var registry = {}, seen = {};
-
-  define = function(name, deps, callback) {
-    registry[name] = { deps: deps, callback: callback };
-  };
-
-  requirejs = require = requireModule = function(name) {
-  requirejs._eak_seen = registry;
-
-    if (seen[name]) { return seen[name]; }
-    seen[name] = {};
-
-    if (!registry[name]) {
-      throw new Error("Could not find module " + name);
-    }
-
-    var mod = registry[name],
-        deps = mod.deps,
-        callback = mod.callback,
-        reified = [],
-        exports;
-
-    for (var i=0, l=deps.length; i<l; i++) {
-      if (deps[i] === 'exports') {
-        reified.push(exports = {});
-      } else {
-        reified.push(requireModule(resolve(deps[i])));
-      }
-    }
-
-    var value = callback.apply(this, reified);
-    return seen[name] = exports || value;
-
-    function resolve(child) {
-      if (child.charAt(0) !== '.') { return child; }
-      var parts = child.split("/");
-      var parentBase = name.split("/").slice(0, -1);
-
-      for (var i=0, l=parts.length; i<l; i++) {
-        var part = parts[i];
-
-        if (part === '..') { parentBase.pop(); }
-        else if (part === '.') { continue; }
-        else { parentBase.push(part); }
-      }
-
-      return parentBase.join("/");
-    }
-  };
-})();
-(function() {
-/*globals Em:true ENV EmberENV MetamorphENV:true */
-
-/**
-@module ember
-@submodule ember-metal
-*/
-
-/**
-  All Ember methods and functions are defined inside of this namespace. You
-  generally should not add new properties to this namespace as it may be
-  overwritten by future versions of Ember.
-
-  You can also use the shorthand `Em` instead of `Ember`.
-
-  Ember-Runtime is a framework that provides core functions for Ember including
-  cross-platform functions, support for property observing and objects. Its
-  focus is on small size and performance. You can use this in place of or
-  along-side other cross-platform libraries such as jQuery.
-
-  The core Runtime framework is based on the jQuery API with a number of
-  performance optimizations.
-
-  @class Ember
-  @static
-  @version 1.5.1+pre.ff8c6bbb
-*/
-
-if ('undefined' === typeof Ember) {
-  // Create core object. Make it act like an instance of Ember.Namespace so that
-  // objects assigned to it are given a sane string representation.
-  Ember = {};
-}
-
-// Default imports, exports and lookup to the global object;
-var imports = Ember.imports = Ember.imports || this;
-var exports = Ember.exports = Ember.exports || this;
-var lookup  = Ember.lookup  = Ember.lookup  || this;
-
-// aliases needed to keep minifiers from removing the global context
-exports.Em = exports.Ember = Em = Ember;
-
-// Make sure these are set whether Ember was already defined or not
-
-Ember.isNamespace = true;
-
-Ember.toString = function() { return "Ember"; };
-
-
-/**
-  @property VERSION
-  @type String
-  @default '1.5.1+pre.ff8c6bbb'
-  @static
-*/
-Ember.VERSION = '1.5.1+pre.ff8c6bbb';
-
-/**
-  Standard environmental variables. You can define these in a global `EmberENV`
-  variable before loading Ember to control various configuration settings.
-
-  For backwards compatibility with earlier versions of Ember the global `ENV`
-  variable will be used if `EmberENV` is not defined.
-
-  @property ENV
-  @type Hash
-*/
-
-// This needs to be kept in sync with the logic in
-// `packages/ember-debug/lib/main.js`.
-if (Ember.ENV) {
-  // do nothing if Ember.ENV is already setup
-} else if ('undefined' !== typeof EmberENV) {
-  Ember.ENV = EmberENV;
-} else if('undefined' !== typeof ENV) {
-  Ember.ENV = ENV;
-} else {
-  Ember.ENV = {};
-}
-
-Ember.config = Ember.config || {};
-
-// We disable the RANGE API by default for performance reasons
-if ('undefined' === typeof Ember.ENV.DISABLE_RANGE_API) {
-  Ember.ENV.DISABLE_RANGE_API = true;
-}
-
-if ("undefined" === typeof MetamorphENV) {
-  exports.MetamorphENV = {};
-}
-
-MetamorphENV.DISABLE_RANGE_API = Ember.ENV.DISABLE_RANGE_API;
-
-/**
-  Hash of enabled Canary features. Add to before creating your application.
-
-  You can also define `ENV.FEATURES` if you need to enable features flagged at runtime.
-
-  @property FEATURES
-  @type Hash
-*/
-
-Ember.FEATURES = Ember.ENV.FEATURES || {};
-
-/**
-  Test that a feature is enabled. Parsed by Ember's build tools to leave
-  experimental features out of beta/stable builds.
-
-  You can define the following configuration options:
-
-  * `ENV.ENABLE_ALL_FEATURES` - force all features to be enabled.
-  * `ENV.ENABLE_OPTIONAL_FEATURES` - enable any features that have not been explicitly
-    enabled/disabled.
-
-  @method isEnabled
-  @param {string} feature
-*/
-
-Ember.FEATURES.isEnabled = function(feature) {
-  var featureValue = Ember.FEATURES[feature];
-
-  if (Ember.ENV.ENABLE_ALL_FEATURES) {
-    return true;
-  } else if (featureValue === true || featureValue === false || featureValue === undefined) {
-    return featureValue;
-  } else if (Ember.ENV.ENABLE_OPTIONAL_FEATURES) {
-    return true;
-  } else {
-    return false;
-  }
-};
-
-// ..........................................................
-// BOOTSTRAP
-//
-
-/**
-  Determines whether Ember should enhances some built-in object prototypes to
-  provide a more friendly API. If enabled, a few methods will be added to
-  `Function`, `String`, and `Array`. `Object.prototype` will not be enhanced,
-  which is the one that causes most trouble for people.
-
-  In general we recommend leaving this option set to true since it rarely
-  conflicts with other code. If you need to turn it off however, you can
-  define an `ENV.EXTEND_PROTOTYPES` config to disable it.
-
-  @property EXTEND_PROTOTYPES
-  @type Boolean
-  @default true
-*/
-Ember.EXTEND_PROTOTYPES = Ember.ENV.EXTEND_PROTOTYPES;
-
-if (typeof Ember.EXTEND_PROTOTYPES === 'undefined') {
-  Ember.EXTEND_PROTOTYPES = true;
-}
-
-/**
-  Determines whether Ember logs a full stack trace during deprecation warnings
-
-  @property LOG_STACKTRACE_ON_DEPRECATION
-  @type Boolean
-  @default true
-*/
-Ember.LOG_STACKTRACE_ON_DEPRECATION = (Ember.ENV.LOG_STACKTRACE_ON_DEPRECATION !== false);
-
-/**
-  Determines whether Ember should add ECMAScript 5 shims to older browsers.
-
-  @property SHIM_ES5
-  @type Boolean
-  @default Ember.EXTEND_PROTOTYPES
-*/
-Ember.SHIM_ES5 = (Ember.ENV.SHIM_ES5 === false) ? false : Ember.EXTEND_PROTOTYPES;
-
-/**
-  Determines whether Ember logs info about version of used libraries
-
-  @property LOG_VERSION
-  @type Boolean
-  @default true
-*/
-Ember.LOG_VERSION = (Ember.ENV.LOG_VERSION === false) ? false : true;
-
-/**
-  Empty function. Useful for some operations. Always returns `this`.
-
-  @method K
-  @private
-  @return {Object}
-*/
-Ember.K = function() { return this; };
-
-
-// Stub out the methods defined by the ember-debug package in case it's not loaded
-
-if ('undefined' === typeof Ember.assert) { Ember.assert = Ember.K; }
-if ('undefined' === typeof Ember.warn) { Ember.warn = Ember.K; }
-if ('undefined' === typeof Ember.debug) { Ember.debug = Ember.K; }
-if ('undefined' === typeof Ember.runInDebug) { Ember.runInDebug = Ember.K; }
-if ('undefined' === typeof Ember.deprecate) { Ember.deprecate = Ember.K; }
-if ('undefined' === typeof Ember.deprecateFunc) {
-  Ember.deprecateFunc = function(_, func) { return func; };
-}
-
-/**
-  Previously we used `Ember.$.uuid`, however `$.uuid` has been removed from
-  jQuery master. We'll just bootstrap our own uuid now.
-
-  @property uuid
-  @type Number
-  @private
-*/
-Ember.uuid = 0;
-
-/**
-  Merge the contents of two objects together into the first object.
-
-  ```javascript
-  Ember.merge({first: 'Tom'}, {last: 'Dale'}); // {first: 'Tom', last: 'Dale'}
-  var a = {first: 'Yehuda'}, b = {last: 'Katz'};
-  Ember.merge(a, b); // a == {first: 'Yehuda', last: 'Katz'}, b == {last: 'Katz'}
-  ```
-
-  @method merge
-  @for Ember
-  @param {Object} original The object to merge into
-  @param {Object} updates The object to copy properties from
-  @return {Object}
-*/
-Ember.merge = function(original, updates) {
-  for (var prop in updates) {
-    if (!updates.hasOwnProperty(prop)) { continue; }
-    original[prop] = updates[prop];
-  }
-  return original;
-};
-
-/**
-  Returns true if the passed value is null or undefined. This avoids errors
-  from JSLint complaining about use of ==, which can be technically
-  confusing.
-
-  ```javascript
-  Ember.isNone();              // true
-  Ember.isNone(null);          // true
-  Ember.isNone(undefined);     // true
-  Ember.isNone('');            // false
-  Ember.isNone([]);            // false
-  Ember.isNone(function() {});  // false
-  ```
-
-  @method isNone
-  @for Ember
-  @param {Object} obj Value to test
-  @return {Boolean}
-*/
-Ember.isNone = function(obj) {
-  return obj === null || obj === undefined;
-};
-Ember.none = Ember.deprecateFunc("Ember.none is deprecated. Please use Ember.isNone instead.", Ember.isNone);
-
-/**
-  Verifies that a value is `null` or an empty string, empty array,
-  or empty function.
-
-  Constrains the rules on `Ember.isNone` by returning false for empty
-  string and empty arrays.
-
-  ```javascript
-  Ember.isEmpty();                // true
-  Ember.isEmpty(null);            // true
-  Ember.isEmpty(undefined);       // true
-  Ember.isEmpty('');              // true
-  Ember.isEmpty([]);              // true
-  Ember.isEmpty('Adam Hawkins');  // false
-  Ember.isEmpty([0,1,2]);         // false
-  ```
-
-  @method isEmpty
-  @for Ember
-  @param {Object} obj Value to test
-  @return {Boolean}
-*/
-Ember.isEmpty = function(obj) {
-  return Ember.isNone(obj) || (obj.length === 0 && typeof obj !== 'function') || (typeof obj === 'object' && Ember.get(obj, 'length') === 0);
-};
-Ember.empty = Ember.deprecateFunc("Ember.empty is deprecated. Please use Ember.isEmpty instead.", Ember.isEmpty);
-
-
-  /**
-    A value is blank if it is empty or a whitespace string.
-
-    ```javascript
-    Ember.isBlank();                // true
-    Ember.isBlank(null);            // true
-    Ember.isBlank(undefined);       // true
-    Ember.isBlank('');              // true
-    Ember.isBlank([]);              // true
-    Ember.isBlank('\n\t');          // true
-    Ember.isBlank('  ');            // true
-    Ember.isBlank({});              // false
-    Ember.isBlank('\n\t Hello');    // false
-    Ember.isBlank('Hello world');   // false
-    Ember.isBlank([1,2,3]);         // false
-    ```
-
-    @method isBlank
-    @for Ember
-    @param {Object} obj Value to test
-    @return {Boolean}
-  */
-  Ember.isBlank = function(obj) {
-    return Ember.isEmpty(obj) || (typeof obj === 'string' && obj.match(/\S/) === null);
-  };
-
-
-})();
-
-
-
-(function() {
-/*globals Node */
-/**
-@module ember-metal
-*/
-
-/**
-  Platform specific methods and feature detectors needed by the framework.
-
-  @class platform
-  @namespace Ember
-  @static
-*/
-var platform = Ember.platform = {};
-
-
-/**
-  Identical to `Object.create()`. Implements if not available natively.
-
-  @method create
-  @for Ember
-*/
-Ember.create = Object.create;
-
-// IE8 has Object.create but it couldn't treat property descriptors.
-if (Ember.create) {
-  if (Ember.create({a: 1}, {a: {value: 2}}).a !== 2) {
-    Ember.create = null;
-  }
-}
-
-// STUB_OBJECT_CREATE allows us to override other libraries that stub
-// Object.create different than we would prefer
-if (!Ember.create || Ember.ENV.STUB_OBJECT_CREATE) {
-  var K = function() {};
-
-  Ember.create = function(obj, props) {
-    K.prototype = obj;
-    obj = new K();
-    if (props) {
-      K.prototype = obj;
-      for (var prop in props) {
-        K.prototype[prop] = props[prop].value;
-      }
-      obj = new K();
-    }
-    K.prototype = null;
-
-    return obj;
-  };
-
-  Ember.create.isSimulated = true;
-}
-
-var defineProperty = Object.defineProperty;
-var canRedefineProperties, canDefinePropertyOnDOM;
-
-// Catch IE8 where Object.defineProperty exists but only works on DOM elements
-if (defineProperty) {
-  try {
-    defineProperty({}, 'a',{get:function() {}});
-  } catch (e) {
-    defineProperty = null;
-  }
-}
-
-if (defineProperty) {
-  // Detects a bug in Android <3.2 where you cannot redefine a property using
-  // Object.defineProperty once accessors have already been set.
-  canRedefineProperties = (function() {
-    var obj = {};
-
-    defineProperty(obj, 'a', {
-      configurable: true,
-      enumerable: true,
-      get: function() { },
-      set: function() { }
-    });
-
-    defineProperty(obj, 'a', {
-      configurable: true,
-      enumerable: true,
-      writable: true,
-      value: true
-    });
-
-    return obj.a === true;
-  })();
-
-  // This is for Safari 5.0, which supports Object.defineProperty, but not
-  // on DOM nodes.
-  canDefinePropertyOnDOM = (function() {
-    try {
-      defineProperty(document.createElement('div'), 'definePropertyOnDOM', {});
-      return true;
-    } catch(e) { }
-
-    return false;
-  })();
-
-  if (!canRedefineProperties) {
-    defineProperty = null;
-  } else if (!canDefinePropertyOnDOM) {
-    defineProperty = function(obj, keyName, desc) {
-      var isNode;
-
-      if (typeof Node === "object") {
-        isNode = obj instanceof Node;
-      } else {
-        isNode = typeof obj === "object" && typeof obj.nodeType === "number" && typeof obj.nodeName === "string";
-      }
-
-      if (isNode) {
-        // TODO: Should we have a warning here?
-        return (obj[keyName] = desc.value);
-      } else {
-        return Object.defineProperty(obj, keyName, desc);
-      }
-    };
-  }
-}
-
-/**
-@class platform
-@namespace Ember
-*/
-
-/**
-  Identical to `Object.defineProperty()`. Implements as much functionality
-  as possible if not available natively.
-
-  @method defineProperty
-  @param {Object} obj The object to modify
-  @param {String} keyName property name to modify
-  @param {Object} desc descriptor hash
-  @return {void}
-*/
-platform.defineProperty = defineProperty;
-
-/**
-  Set to true if the platform supports native getters and setters.
-
-  @property hasPropertyAccessors
-  @final
-*/
-platform.hasPropertyAccessors = true;
-
-if (!platform.defineProperty) {
-  platform.hasPropertyAccessors = false;
-
-  platform.defineProperty = function(obj, keyName, desc) {
-    if (!desc.get) { obj[keyName] = desc.value; }
-  };
-
-  platform.defineProperty.isSimulated = true;
-}
-
-if (Ember.ENV.MANDATORY_SETTER && !platform.hasPropertyAccessors) {
-  Ember.ENV.MANDATORY_SETTER = false;
-}
-
-})();
-
-
-
-(function() {
-/*jshint newcap:false*/
-/**
-@module ember-metal
-*/
-
-// NOTE: There is a bug in jshint that doesn't recognize `Object()` without `new`
-// as being ok unless both `newcap:false` and not `use strict`.
-// https://github.com/jshint/jshint/issues/392
-
-// Testing this is not ideal, but we want to use native functions
-// if available, but not to use versions created by libraries like Prototype
-var isNativeFunc = function(func) {
-  // This should probably work in all browsers likely to have ES5 array methods
-  return func && Function.prototype.toString.call(func).indexOf('[native code]') > -1;
-};
-
-// From: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/map
-var arrayMap = isNativeFunc(Array.prototype.map) ? Array.prototype.map : function(fun /*, thisp */) {
-  //"use strict";
-
-  if (this === void 0 || this === null) {
-    throw new TypeError();
-  }
-
-  var t = Object(this);
-  var len = t.length >>> 0;
-  if (typeof fun !== "function") {
-    throw new TypeError();
-  }
-
-  var res = new Array(len);
-  var thisp = arguments[1];
-  for (var i = 0; i < len; i++) {
-    if (i in t) {
-      res[i] = fun.call(thisp, t[i], i, t);
-    }
-  }
-
-  return res;
-};
-
-// From: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/foreach
-var arrayForEach = isNativeFunc(Array.prototype.forEach) ? Array.prototype.forEach : function(fun /*, thisp */) {
-  //"use strict";
-
-  if (this === void 0 || this === null) {
-    throw new TypeError();
-  }
-
-  var t = Object(this);
-  var len = t.length >>> 0;
-  if (typeof fun !== "function") {
-    throw new TypeError();
-  }
-
-  var thisp = arguments[1];
-  for (var i = 0; i < len; i++) {
-    if (i in t) {
-      fun.call(thisp, t[i], i, t);
-    }
-  }
-};
-
-var arrayIndexOf = isNativeFunc(Array.prototype.indexOf) ? Array.prototype.indexOf : function (obj, fromIndex) {
-  if (fromIndex === null || fromIndex === undefined) { fromIndex = 0; }
-  else if (fromIndex < 0) { fromIndex = Math.max(0, this.length + fromIndex); }
-  for (var i = fromIndex, j = this.length; i < j; i++) {
-    if (this[i] === obj) { return i; }
-  }
-  return -1;
-};
-
-var arrayFilter = isNativeFunc(Array.prototype.filter) ? Array.prototype.filter : function (fn, context) {
-  var i,
-  value,
-  result = [],
-  length = this.length;
-
-  for (i = 0; i < length; i++) {
-    if (this.hasOwnProperty(i)) {
-      value = this[i];
-      if (fn.call(context, value, i, this)) {
-        result.push(value);
-      }
-    }
-  }
-  return result;
-};
-
-/**
-  Array polyfills to support ES5 features in older browsers.
-
-  @namespace Ember
-  @property ArrayPolyfills
-*/
-Ember.ArrayPolyfills = {
-  map: arrayMap,
-  forEach: arrayForEach,
-  filter: arrayFilter,
-  indexOf: arrayIndexOf
-};
-
-if (Ember.SHIM_ES5) {
-  if (!Array.prototype.map) {
-    Array.prototype.map = arrayMap;
-  }
-
-  if (!Array.prototype.forEach) {
-    Array.prototype.forEach = arrayForEach;
-  }
-
-  if (!Array.prototype.filter) {
-    Array.prototype.filter = arrayFilter;
-  }
-
-  if (!Array.prototype.indexOf) {
-    Array.prototype.indexOf = arrayIndexOf;
-  }
-}
-
-})();
-
-
-
-(function() {
-var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];
-
-/**
-  A subclass of the JavaScript Error object for use in Ember.
-
-  @class Error
-  @namespace Ember
-  @extends Error
-  @constructor
-*/
-Ember.Error = function() {
-  var tmp = Error.apply(this, arguments);
-
-  // Adds a `stack` property to the given error object that will yield the
-  // stack trace at the time captureStackTrace was called.
-  // When collecting the stack trace all frames above the topmost call
-  // to this function, including that call, will be left out of the
-  // stack trace.
-  // This is useful because we can hide Ember implementation details
-  // that are not very helpful for the user.
-  if (Error.captureStackTrace) {
-    Error.captureStackTrace(this, Ember.Error);
-  }
-  // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
-  for (var idx = 0; idx < errorProps.length; idx++) {
-    this[errorProps[idx]] = tmp[errorProps[idx]];
-  }
-};
-
-Ember.Error.prototype = Ember.create(Error.prototype);
-
-// ..........................................................
-// ERROR HANDLING
-//
-
-/**
-  A function may be assigned to `Ember.onerror` to be called when Ember
-  internals encounter an error. This is useful for specialized error handling
-  and reporting code.
-
-  ```javascript
-  Ember.onerror = function(error) {
-    Em.$.ajax('/report-error', 'POST', {
-      stack: error.stack,
-      otherInformation: 'whatever app state you want to provide'
-    });
-  };
-  ```
-
-  @event onerror
-  @for Ember
-  @param {Exception} error the error object
-*/
-Ember.onerror = null;
-
-})();
-
-
-
-(function() {
-/**
-@module ember-metal
-*/
-
-/**
-  Prefix used for guids through out Ember.
-  @private
-*/
-Ember.GUID_PREFIX = 'ember';
-
-
-var o_defineProperty = Ember.platform.defineProperty,
-    o_create = Ember.create,
-    // Used for guid generation...
-    GUID_KEY = '__ember'+ (+ new Date()),
-    numberCache  = [],
-    stringCache  = {},
-    uuid = 0;
-
-var MANDATORY_SETTER = Ember.ENV.MANDATORY_SETTER;
-
-/**
-  A unique key used to assign guids and other private metadata to objects.
-  If you inspect an object in your browser debugger you will often see these.
-  They can be safely ignored.
-
-  On browsers that support it, these properties are added with enumeration
-  disabled so they won't show up when you iterate over your properties.
-
-  @private
-  @property GUID_KEY
-  @for Ember
-  @type String
-  @final
-*/
-Ember.GUID_KEY = GUID_KEY;
-
-var GUID_DESC = {
-  writable:    false,
-  configurable: false,
-  enumerable:  false,
-  value: null
-};
-
-/**
-  Generates a new guid, optionally saving the guid to the object that you
-  pass in. You will rarely need to use this method. Instead you should
-  call `Ember.guidFor(obj)`, which return an existing guid if available.
-
-  @private
-  @method generateGuid
-  @for Ember
-  @param {Object} [obj] Object the guid will be used for. If passed in, the guid will
-    be saved on the object and reused whenever you pass the same object
-    again.
-
-    If no object is passed, just generate a new guid.
-  @param {String} [prefix] Prefix to place in front of the guid. Useful when you want to
-    separate the guid into separate namespaces.
-  @return {String} the guid
-*/
-Ember.generateGuid = function generateGuid(obj, prefix) {
-  if (!prefix) prefix = Ember.GUID_PREFIX;
-  var ret = (prefix + (uuid++));
-  if (obj) {
-    if (obj[GUID_KEY] === null) {
-      obj[GUID_KEY] = ret;
-    } else {
-      GUID_DESC.value = ret;
-      o_defineProperty(obj, GUID_KEY, GUID_DESC);
-    }
-  }
-  return ret;
-};
-
-/**
-  Returns a unique id for the object. If the object does not yet have a guid,
-  one will be assigned to it. You can call this on any object,
-  `Ember.Object`-based or not, but be aware that it will add a `_guid`
-  property.
-
-  You can also use this method on DOM Element objects.
-
-  @private
-  @method guidFor
-  @for Ember
-  @param {Object} obj any object, string, number, Element, or primitive
-  @return {String} the unique guid for this instance.
-*/
-Ember.guidFor = function guidFor(obj) {
-
-  // special cases where we don't want to add a key to object
-  if (obj === undefined) return "(undefined)";
-  if (obj === null) return "(null)";
-
-  var ret;
-  var type = typeof obj;
-
-  // Don't allow prototype changes to String etc. to change the guidFor
-  switch(type) {
-    case 'number':
-      ret = numberCache[obj];
-      if (!ret) ret = numberCache[obj] = 'nu'+obj;
-      return ret;
-
-    case 'string':
-      ret = stringCache[obj];
-      if (!ret) ret = stringCache[obj] = 'st'+(uuid++);
-      return ret;
-
-    case 'boolean':
-      return obj ? '(true)' : '(false)';
-
-    default:
-      if (obj[GUID_KEY]) return obj[GUID_KEY];
-      if (obj === Object) return '(Object)';
-      if (obj === Array)  return '(Array)';
-      ret = 'ember' + (uuid++);
-
-      if (obj[GUID_KEY] === null) {
-        obj[GUID_KEY] = ret;
-      } else {
-        GUID_DESC.value = ret;
-        o_defineProperty(obj, GUID_KEY, GUID_DESC);
-      }
-      return ret;
-  }
-};
-
-// ..........................................................
-// META
-//
-
-var META_DESC = Ember.META_DESC = {
-  writable:    true,
-  configurable: false,
-  enumerable:  false,
-  value: null
-};
-
-var META_KEY = Ember.GUID_KEY+'_meta';
-
-/**
-  The key used to store meta information on object for property observing.
-
-  @property META_KEY
-  @for Ember
-  @private
-  @final
-  @type String
-*/
-Ember.META_KEY = META_KEY;
-
-var isDefinePropertySimulated = Ember.platform.defineProperty.isSimulated;
-
-function Meta(obj) {
-  this.descs = {};
-  this.watching = {};
-  this.cache = {};
-  this.cacheMeta = {};
-  this.source = obj;
-}
-
-Meta.prototype = {
-  descs: null,
-  deps: null,
-  watching: null,
-  listeners: null,
-  cache: null,
-  cacheMeta: null,
-  source: null,
-  mixins: null,
-  bindings: null,
-  chains: null,
-  chainWatchers: null,
-  values: null,
-  proto: null
-};
-
-if (isDefinePropertySimulated) {
-  // on platforms that don't support enumerable false
-  // make meta fail jQuery.isPlainObject() to hide from
-  // jQuery.extend() by having a property that fails
-  // hasOwnProperty check.
-  Meta.prototype.__preventPlainObject__ = true;
-
-  // Without non-enumerable properties, meta objects will be output in JSON
-  // unless explicitly suppressed
-  Meta.prototype.toJSON = function () { };
-}
-
-// Placeholder for non-writable metas.
-var EMPTY_META = new Meta(null);
-
-if (MANDATORY_SETTER) { EMPTY_META.values = {}; }
-
-Ember.EMPTY_META = EMPTY_META;
-
-/**
-  Retrieves the meta hash for an object. If `writable` is true ensures the
-  hash is writable for this object as well.
-
-  The meta object contains information about computed property descriptors as
-  well as any watched properties and other information. You generally will
-  not access this information directly but instead work with higher level
-  methods that manipulate this hash indirectly.
-
-  @method meta
-  @for Ember
-  @private
-
-  @param {Object} obj The object to retrieve meta for
-  @param {Boolean} [writable=true] Pass `false` if you do not intend to modify
-    the meta hash, allowing the method to avoid making an unnecessary copy.
-  @return {Object} the meta hash for an object
-*/
-Ember.meta = function meta(obj, writable) {
-
-  var ret = obj[META_KEY];
-  if (writable===false) return ret || EMPTY_META;
-
-  if (!ret) {
-    if (!isDefinePropertySimulated) o_defineProperty(obj, META_KEY, META_DESC);
-
-    ret = new Meta(obj);
-
-    if (MANDATORY_SETTER) { ret.values = {}; }
-
-    obj[META_KEY] = ret;
-
-    // make sure we don't accidentally try to create constructor like desc
-    ret.descs.constructor = null;
-
-  } else if (ret.source !== obj) {
-    if (!isDefinePropertySimulated) o_defineProperty(obj, META_KEY, META_DESC);
-
-    ret = o_create(ret);
-    ret.descs     = o_create(ret.descs);
-    ret.watching  = o_create(ret.watching);
-    ret.cache     = {};
-    ret.cacheMeta = {};
-    ret.source    = obj;
-
-    if (MANDATORY_SETTER) { ret.values = o_create(ret.values); }
-
-    obj[META_KEY] = ret;
-  }
-  return ret;
-};
-
-Ember.getMeta = function getMeta(obj, property) {
-  var meta = Ember.meta(obj, false);
-  return meta[property];
-};
-
-Ember.setMeta = function setMeta(obj, property, value) {
-  var meta = Ember.meta(obj, true);
-  meta[property] = value;
-  return value;
-};
-
-/**
-  @deprecated
-  @private
-
-  In order to store defaults for a class, a prototype may need to create
-  a default meta object, which will be inherited by any objects instantiated
-  from the class's constructor.
-
-  However, the properties of that meta object are only shallow-cloned,
-  so if a property is a hash (like the event system's `listeners` hash),
-  it will by default be shared across all instances of that class.
-
-  This method allows extensions to deeply clone a series of nested hashes or
-  other complex objects. For instance, the event system might pass
-  `['listeners', 'foo:change', 'ember157']` to `prepareMetaPath`, which will
-  walk down the keys provided.
-
-  For each key, if the key does not exist, it is created. If it already
-  exists and it was inherited from its constructor, the constructor's
-  key is cloned.
-
-  You can also pass false for `writable`, which will simply return
-  undefined if `prepareMetaPath` discovers any part of the path that
-  shared or undefined.
-
-  @method metaPath
-  @for Ember
-  @param {Object} obj The object whose meta we are examining
-  @param {Array} path An array of keys to walk down
-  @param {Boolean} writable whether or not to create a new meta
-    (or meta property) if one does not already exist or if it's
-    shared with its constructor
-*/
-Ember.metaPath = function metaPath(obj, path, writable) {
-    var meta = Ember.meta(obj, writable), keyName, value;
-
-  for (var i=0, l=path.length; i<l; i++) {
-    keyName = path[i];
-    value = meta[keyName];
-
-    if (!value) {
-      if (!writable) { return undefined; }
-      value = meta[keyName] = { __ember_source__: obj };
-    } else if (value.__ember_source__ !== obj) {
-      if (!writable) { return undefined; }
-      value = meta[keyName] = o_create(value);
-      value.__ember_source__ = obj;
-    }
-
-    meta = value;
-  }
-
-  return value;
-};
-
-/**
-  Wraps the passed function so that `this._super` will point to the superFunc
-  when the function is invoked. This is the primitive we use to implement
-  calls to super.
-
-  @private
-  @method wrap
-  @for Ember
-  @param {Function} func The function to call
-  @param {Function} superFunc The super function.
-  @return {Function} wrapped function.
-*/
-Ember.wrap = function(func, superFunc) {
-  function superWrapper() {
-    var ret, sup = this.__nextSuper;
-    this.__nextSuper = superFunc;
-    ret = func.apply(this, arguments);
-    this.__nextSuper = sup;
-    return ret;
-  }
-
-  superWrapper.wrappedFunction = func;
-  superWrapper.__ember_observes__ = func.__ember_observes__;
-  superWrapper.__ember_observesBefore__ = func.__ember_observesBefore__;
-  superWrapper.__ember_listens__ = func.__ember_listens__;
-
-  return superWrapper;
-};
-
-/**
-  Returns true if the passed object is an array or Array-like.
-
-  Ember Array Protocol:
-
-    - the object has an objectAt property
-    - the object is a native Array
-    - the object is an Object, and has a length property
-
-  Unlike `Ember.typeOf` this method returns true even if the passed object is
-  not formally array but appears to be array-like (i.e. implements `Ember.Array`)
-
-  ```javascript
-  Ember.isArray();                                            // false
-  Ember.isArray([]);                                          // true
-  Ember.isArray( Ember.ArrayProxy.create({ content: [] }) );  // true
-  ```
-
-  @method isArray
-  @for Ember
-  @param {Object} obj The object to test
-  @return {Boolean} true if the passed object is an array or Array-like
-*/
-Ember.isArray = function(obj) {
-  if (!obj || obj.setInterval) { return false; }
-  if (Array.isArray && Array.isArray(obj)) { return true; }
-  if (Ember.Array && Ember.Array.detect(obj)) { return true; }
-  if ((obj.length !== undefined) && 'object'===typeof obj) { return true; }
-  return false;
-};
-
-/**
-  Forces the passed object to be part of an array. If the object is already
-  an array or array-like, returns the object. Otherwise adds the object to
-  an array. If obj is `null` or `undefined`, returns an empty array.
-
-  ```javascript
-  Ember.makeArray();                           // []
-  Ember.makeArray(null);                       // []
-  Ember.makeArray(undefined);                  // []
-  Ember.makeArray('lindsay');                  // ['lindsay']
-  Ember.makeArray([1,2,42]);                   // [1,2,42]
-
-  var controller = Ember.ArrayProxy.create({ content: [] });
-  Ember.makeArray(controller) === controller;  // true
-  ```
-
-  @method makeArray
-  @for Ember
-  @param {Object} obj the object
-  @return {Array}
-*/
-Ember.makeArray = function(obj) {
-  if (obj === null || obj === undefined) { return []; }
-  return Ember.isArray(obj) ? obj : [obj];
-};
-
-function canInvoke(obj, methodName) {
-  return !!(obj && typeof obj[methodName] === 'function');
-}
-
-/**
-  Checks to see if the `methodName` exists on the `obj`.
-
-  ```javascript
-  var foo = {bar: Ember.K, baz: null};
-  Ember.canInvoke(foo, 'bar'); // true
-  Ember.canInvoke(foo, 'baz'); // false
-  Ember.canInvoke(foo, 'bat'); // false
-  ```
-
-  @method canInvoke
-  @for Ember
-  @param {Object} obj The object to check for the method
-  @param {String} methodName The method name to check for
-  @return {Boolean}
-*/
-Ember.canInvoke = canInvoke;
-
-/**
-  Checks to see if the `methodName` exists on the `obj`,
-  and if it does, invokes it with the arguments passed.
-
-  ```javascript
-  var d = new Date('03/15/2013');
-  Ember.tryInvoke(d, 'getTime'); // 1363320000000
-  Ember.tryInvoke(d, 'setFullYear', [2014]); // 1394856000000
-  Ember.tryInvoke(d, 'noSuchMethod', [2014]); // undefined
-  ```
-
-  @method tryInvoke
-  @for Ember
-  @param {Object} obj The object to check for the method
-  @param {String} methodName The method name to check for
-  @param {Array} [args] The arguments to pass to the method
-  @return {*} the return value of the invoked method or undefined if it cannot be invoked
-*/
-Ember.tryInvoke = function(obj, methodName, args) {
-  if (canInvoke(obj, methodName)) {
-    return obj[methodName].apply(obj, args || []);
-  }
-};
-
-// https://github.com/emberjs/ember.js/pull/1617
-var needsFinallyFix = (function() {
-  var count = 0;
-  try{
-    try { }
-    finally {
-      count++;
-      throw new Error('needsFinallyFixTest');
-    }
-  } catch (e) {}
-
-  return count !== 1;
-})();
-
-/**
-  Provides try { } finally { } functionality, while working
-  around Safari's double finally bug.
-
-  ```javascript
-  var tryable = function() {
-    someResource.lock();
-    runCallback(); // May throw error.
-  };
-  var finalizer = function() {
-    someResource.unlock();
-  };
-  Ember.tryFinally(tryable, finalizer);
-  ```
-
-  @method tryFinally
-  @for Ember
-  @param {Function} tryable The function to run the try callback
-  @param {Function} finalizer The function to run the finally callback
-  @param {Object} [binding] The optional calling object. Defaults to 'this'
-  @return {*} The return value is the that of the finalizer,
-  unless that value is undefined, in which case it is the return value
-  of the tryable
-*/
-
-if (needsFinallyFix) {
-  Ember.tryFinally = function(tryable, finalizer, binding) {
-    var result, finalResult, finalError;
-
-    binding = binding || this;
-
-    try {
-      result = tryable.call(binding);
-    } finally {
-      try {
-        finalResult = finalizer.call(binding);
-      } catch (e) {
-        finalError = e;
-      }
-    }
-
-    if (finalError) { throw finalError; }
-
-    return (finalResult === undefined) ? result : finalResult;
-  };
-} else {
-  Ember.tryFinally = function(tryable, finalizer, binding) {
-    var result, finalResult;
-
-    binding = binding || this;
-
-    try {
-      result = tryable.call(binding);
-    } finally {
-      finalResult = finalizer.call(binding);
-    }
-
-    return (finalResult === undefined) ? result : finalResult;
-  };
-}
-
-/**
-  Provides try { } catch finally { } functionality, while working
-  around Safari's double finally bug.
-
-  ```javascript
-  var tryable = function() {
-    for (i=0, l=listeners.length; i<l; i++) {
-      listener = listeners[i];
-      beforeValues[i] = listener.before(name, time(), payload);
-    }
-
-    return callback.call(binding);
-  };
-
-  var catchable = function(e) {
-    payload = payload || {};
-    payload.exception = e;
-  };
-
-  var finalizer = function() {
-    for (i=0, l=listeners.length; i<l; i++) {
-      listener = listeners[i];
-      listener.after(name, time(), payload, beforeValues[i]);
-    }
-  };
-  Ember.tryCatchFinally(tryable, catchable, finalizer);
-  ```
-
-  @method tryCatchFinally
-  @for Ember
-  @param {Function} tryable The function to run the try callback
-  @param {Function} catchable The function to run the catchable callback
-  @param {Function} finalizer The function to run the finally callback
-  @param {Object} [binding] The optional calling object. Defaults to 'this'
-  @return {*} The return value is the that of the finalizer,
-  unless that value is undefined, in which case it is the return value
-  of the tryable.
-*/
-if (needsFinallyFix) {
-  Ember.tryCatchFinally = function(tryable, catchable, finalizer, binding) {
-    var result, finalResult, finalError;
-
-    binding = binding || this;
-
-    try {
-      result = tryable.call(binding);
-    } catch(error) {
-      result = catchable.call(binding, error);
-    } finally {
-      try {
-        finalResult = finalizer.call(binding);
-      } catch (e) {
-        finalError = e;
-      }
-    }
-
-    if (finalError) { throw finalError; }
-
-    return (finalResult === undefined) ? result : finalResult;
-  };
-} else {
-  Ember.tryCatchFinally = function(tryable, catchable, finalizer, binding) {
-    var result, finalResult;
-
-    binding = binding || this;
-
-    try {
-      result = tryable.call(binding);
-    } catch(error) {
-      result = catchable.call(binding, error);
-    } finally {
-      finalResult = finalizer.call(binding);
-    }
-
-    return (finalResult === undefined) ? result : finalResult;
-  };
-}
-
-// ........................................
-// TYPING & ARRAY MESSAGING
-//
-
-var TYPE_MAP = {};
-var t = "Boolean Number String Function Array Date RegExp Object".split(" ");
-Ember.ArrayPolyfills.forEach.call(t, function(name) {
-  TYPE_MAP[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-var toString = Object.prototype.toString;
-
-/**
-  Returns a consistent type for the passed item.
-
-  Use this instead of the built-in `typeof` to get the type of an item.
-  It will return the same result across all browsers and includes a bit
-  more detail. Here is what will be returned:
-
-      | Return Value  | Meaning                                              |
-      |---------------|------------------------------------------------------|
-      | 'string'      | String primitive or String object.                   |
-      | 'number'      | Number primitive or Number object.                   |
-      | 'boolean'     | Boolean primitive or Boolean object.                 |
-      | 'null'        | Null value                                           |
-      | 'undefined'   | Undefined value                                      |
-      | 'function'    | A function                                           |
-      | 'array'       | An instance of Array                                 |
-      | 'regexp'      | An instance of RegExp                                |
-      | 'date'        | An instance of Date                                  |
-      | 'class'       | An Ember class (created using Ember.Object.extend()) |
-      | 'instance'    | An Ember object instance                             |
-      | 'error'       | An instance of the Error object                      |
-      | 'object'      | A JavaScript object not inheriting from Ember.Object |
-
-  Examples:
-
-  ```javascript
-  Ember.typeOf();                       // 'undefined'
-  Ember.typeOf(null);                   // 'null'
-  Ember.typeOf(undefined);              // 'undefined'
-  Ember.typeOf('michael');              // 'string'
-  Ember.typeOf(new String('michael'));  // 'string'
-  Ember.typeOf(101);                    // 'number'
-  Ember.typeOf(new Number(101));        // 'number'
-  Ember.typeOf(true);                   // 'boolean'
-  Ember.typeOf(new Boolean(true));      // 'boolean'
-  Ember.typeOf(Ember.makeArray);        // 'function'
-  Ember.typeOf([1,2,90]);               // 'array'
-  Ember.typeOf(/abc/);                  // 'regexp'
-  Ember.typeOf(new Date());             // 'date'
-  Ember.typeOf(Ember.Object.extend());  // 'class'
-  Ember.typeOf(Ember.Object.create());  // 'instance'
-  Ember.typeOf(new Error('teamocil'));  // 'error'
-
-  // "normal" JavaScript object
-  Ember.typeOf({a: 'b'});              // 'object'
-  ```
-
-  @method typeOf
-  @for Ember
-  @param {Object} item the item to check
-  @return {String} the type
-*/
-Ember.typeOf = function(item) {
-  var ret;
-
-  ret = (item === null || item === undefined) ? String(item) : TYPE_MAP[toString.call(item)] || 'object';
-
-  if (ret === 'function') {
-    if (Ember.Object && Ember.Object.detect(item)) ret = 'class';
-  } else if (ret === 'object') {
-    if (item instanceof Error) ret = 'error';
-    else if (Ember.Object && item instanceof Ember.Object) ret = 'instance';
-    else if (item instanceof Date) ret = 'date';
-  }
-
-  return ret;
-};
-
-/**
-  Convenience method to inspect an object. This method will attempt to
-  convert the object into a useful string description.
-
-  It is a pretty simple implementation. If you want something more robust,
-  use something like JSDump: https://github.com/NV/jsDump
-
-  @method inspect
-  @for Ember
-  @param {Object} obj The object you want to inspect.
-  @return {String} A description of the object
-*/
-Ember.inspect = function(obj) {
-  var type = Ember.typeOf(obj);
-  if (type === 'array') {
-    return '[' + obj + ']';
-  }
-  if (type !== 'object') {
-    return obj + '';
-  }
-
-  var v, ret = [];
-  for(var key in obj) {
-    if (obj.hasOwnProperty(key)) {
-      v = obj[key];
-      if (v === 'toString') { continue; } // ignore useless items
-      if (Ember.typeOf(v) === 'function') { v = "function() { ... }"; }
-      ret.push(key + ": " + v);
-    }
-  }
-  return "{" + ret.join(", ") + "}";
-};
-
-
-
-})();
-
-
-
-(function() {
-// Ember.tryCatchFinally
-
-/**
-  The purpose of the Ember Instrumentation module is
-  to provide efficient, general-purpose instrumentation
-  for Ember.
-
-  Subscribe to a listener by using `Ember.subscribe`:
-
-  ```javascript
-  Ember.subscribe("render", {
-    before: function(name, timestamp, payload) {
-
-    },
-
-    after: function(name, timestamp, payload) {
-
-    }
-  });
-  ```
-
-  If you return a value from the `before` callback, that same
-  value will be passed as a fourth parameter to the `after`
-  callback.
-
-  Instrument a block of code by using `Ember.instrument`:
-
-  ```javascript
-  Ember.instrument("render.handlebars", payload, function() {
-    // rendering logic
-  }, binding);
-  ```
-
-  Event names passed to `Ember.instrument` are namespaced
-  by periods, from more general to more specific. Subscribers
-  can listen for events by whatever level of granularity they
-  are interested in.
-
-  In the above example, the event is `render.handlebars`,
-  and the subscriber listened for all events beginning with
-  `render`. It would receive callbacks for events named
-  `render`, `render.handlebars`, `render.container`, or
-  even `render.handlebars.layout`.
-
-  @class Instrumentation
-  @namespace Ember
-  @static
-*/
-Ember.Instrumentation = {};
-
-var subscribers = [], cache = {};
-
-var populateListeners = function(name) {
-  var listeners = [], subscriber;
-
-  for (var i=0, l=subscribers.length; i<l; i++) {
-    subscriber = subscribers[i];
-    if (subscriber.regex.test(name)) {
-      listeners.push(subscriber.object);
-    }
-  }
-
-  cache[name] = listeners;
-  return listeners;
-};
-
-var time = (function() {
-  var perf = 'undefined' !== typeof window ? window.performance || {} : {};
-  var fn = perf.now || perf.mozNow || perf.webkitNow || perf.msNow || perf.oNow;
-  // fn.bind will be available in all the browsers that support the advanced window.performance... ;-)
-  return fn ? fn.bind(perf) : function() { return +new Date(); };
-})();
-
-/**
-  Notifies event's subscribers, calls `before` and `after` hooks.
-
-  @method instrument
-  @namespace Ember.Instrumentation
-
-  @param {String} [name] Namespaced event name.
-  @param {Object} payload
-  @param {Function} callback Function that you're instrumenting.
-  @param {Object} binding Context that instrument function is called with.
-*/
-Ember.Instrumentation.instrument = function(name, payload, callback, binding) {
-  var listeners = cache[name], timeName, ret;
-
-  if (Ember.STRUCTURED_PROFILE) {
-    timeName = name + ": " + payload.object;
-    console.time(timeName);
-  }
-
-  if (!listeners) {
-    listeners = populateListeners(name);
-  }
-
-  if (listeners.length === 0) {
-    ret = callback.call(binding);
-    if (Ember.STRUCTURED_PROFILE) { console.timeEnd(timeName); }
-    return ret;
-  }
-
-  var beforeValues = [], listener, i, l;
-
-  function tryable() {
-    for (i=0, l=listeners.length; i<l; i++) {
-      listener = listeners[i];
-      beforeValues[i] = listener.before(name, time(), payload);
-    }
-
-    return callback.call(binding);
-  }
-
-  function catchable(e) {
-    payload = payload || {};
-    payload.exception = e;
-  }
-
-  function finalizer() {
-    for (i=0, l=listeners.length; i<l; i++) {
-      listener = listeners[i];
-      listener.after(name, time(), payload, beforeValues[i]);
-    }
-
-    if (Ember.STRUCTURED_PROFILE) {
-      console.timeEnd(timeName);
-    }
-  }
-
-  return Ember.tryCatchFinally(tryable, catchable, finalizer);
-};
-
-/**
-  Subscribes to a particular event or instrumented block of code.
-
-  @method subscribe
-  @namespace Ember.Instrumentation
-
-  @param {String} [pattern] Namespaced event name.
-  @param {Object} [object] Before and After hooks.
-
-  @return {Subscriber}
-*/
-Ember.Instrumentation.subscribe = function(pattern, object) {
-  var paths = pattern.split("."), path, regex = [];
-
-  for (var i=0, l=paths.length; i<l; i++) {
-    path = paths[i];
-    if (path === "*") {
-      regex.push("[^\\.]*");
-    } else {
-      regex.push(path);
-    }
-  }
-
-  regex = regex.join("\\.");
-  regex = regex + "(\\..*)?";
-
-  var subscriber = {
-    pattern: pattern,
-    regex: new RegExp("^" + regex + "$"),
-    object: object
-  };
-
-  subscribers.push(subscriber);
-  cache = {};
-
-  return subscriber;
-};
-
-/**
-  Unsubscribes from a particular event or instrumented block of code.
-
-  @method unsubscribe
-  @namespace Ember.Instrumentation
-
-  @param {Object} [subscriber]
-*/
-Ember.Instrumentation.unsubscribe = function(subscriber) {
-  var index;
-
-  for (var i=0, l=subscribers.length; i<l; i++) {
-    if (subscribers[i] === subscriber) {
-      index = i;
-    }
-  }
-
-  subscribers.splice(index, 1);
-  cache = {};
-};
-
-/**
-  Resets `Ember.Instrumentation` by flushing list of subscribers.
-
-  @method reset
-  @namespace Ember.Instrumentation
-*/
-Ember.Instrumentation.reset = function() {
-  subscribers = [];
-  cache = {};
-};
-
-Ember.instrument = Ember.Instrumentation.instrument;
-Ember.subscribe = Ember.Instrumentation.subscribe;
-})();
-
-
-
-(function() {
-var map, forEach, indexOf, splice, filter;
-map     = Array.prototype.map     || Ember.ArrayPolyfills.map;
-forEach = Array.prototype.forEach || Ember.ArrayPolyfills.forEach;
-indexOf = Array.prototype.indexOf || Ember.ArrayPolyfills.indexOf;
-filter = Array.prototype.filter || Ember.ArrayPolyfills.filter;
-splice = Array.prototype.splice;
-
-/**
- * Defines some convenience methods for working with Enumerables.
- * `Ember.EnumerableUtils` uses `Ember.ArrayPolyfills` when necessary.
- *
- * @class EnumerableUtils
- * @namespace Ember
- * @static
- * */
-var utils = Ember.EnumerableUtils = {
-  /**
-   * Calls the map function on the passed object with a specified callback. This
-   * uses `Ember.ArrayPolyfill`'s-map method when necessary.
-   *
-   * @method map
-   * @param {Object} obj The object that should be mapped
-   * @param {Function} callback The callback to execute
-   * @param {Object} thisArg Value to use as this when executing *callback*
-   *
-   * @return {Array} An array of mapped values.
-   */
-  map: function(obj, callback, thisArg) {
-    return obj.map ? obj.map.call(obj, callback, thisArg) : map.call(obj, callback, thisArg);
-  },
-
-  /**
-   * Calls the forEach function on the passed object with a specified callback. This
-   * uses `Ember.ArrayPolyfill`'s-forEach method when necessary.
-   *
-   * @method forEach
-   * @param {Object} obj The object to call forEach on
-   * @param {Function} callback The callback to execute
-   * @param {Object} thisArg Value to use as this when executing *callback*
-   *
-   */
-  forEach: function(obj, callback, thisArg) {
-    return obj.forEach ? obj.forEach.call(obj, callback, thisArg) : forEach.call(obj, callback, thisArg);
-  },
-
-  /**
-   * Calls the filter function on the passed object with a specified callback. This
-   * uses `Ember.ArrayPolyfill`'s-filter method when necessary.
-   *
-   * @method filter
-   * @param {Object} obj The object to call filter on
-   * @param {Function} callback The callback to execute
-   * @param {Object} thisArg Value to use as this when executing *callback*
-   *
-   * @return {Array} An array containing the filtered values
-   */
-  filter: function(obj, callback, thisArg) {
-    return obj.filter ? obj.filter.call(obj, callback, thisArg) : filter.call(obj, callback, thisArg);
-  },
-
-  /**
-   * Calls the indexOf function on the passed object with a specified callback. This
-   * uses `Ember.ArrayPolyfill`'s-indexOf method when necessary.
-   *
-   * @method indexOf
-   * @param {Object} obj The object to call indexOn on
-   * @param {Function} callback The callback to execute
-   * @param {Object} index The index to start searching from
-   *
-   */
-  indexOf: function(obj, element, index) {
-    return obj.indexOf ? obj.indexOf.call(obj, element, index) : indexOf.call(obj, element, index);
-  },
-
-  /**
-   * Returns an array of indexes of the first occurrences of the passed elements
-   * on the passed object.
-   *
-   * ```javascript
-   *  var array = [1, 2, 3, 4, 5];
-   *  Ember.EnumerableUtils.indexesOf(array, [2, 5]); // [1, 4]
-   *
-   *  var fubar = "Fubarr";
-   *  Ember.EnumerableUtils.indexesOf(fubar, ['b', 'r']); // [2, 4]
-   * ```
-   *
-   * @method indexesOf
-   * @param {Object} obj The object to check for element indexes
-   * @param {Array} elements The elements to search for on *obj*
-   *
-   * @return {Array} An array of indexes.
-   *
-   */
-  indexesOf: function(obj, elements) {
-    return elements === undefined ? [] : utils.map(elements, function(item) {
-      return utils.indexOf(obj, item);
-    });
-  },
-
-  /** 
-   * Adds an object to an array. If the array already includes the object this
-   * method has no effect.
-   *
-   * @method addObject
-   * @param {Array} array The array the passed item should be added to
-   * @param {Object} item The item to add to the passed array
-   *
-   * @return 'undefined'
-   */
-  addObject: function(array, item) {
-    var index = utils.indexOf(array, item);
-    if (index === -1) { array.push(item); }
-  },
-
-  /**
-   * Removes an object from an array. If the array does not contain the passed
-   * object this method has no effect.
-   *
-   * @method removeObject
-   * @param {Array} array The array to remove the item from.
-   * @param {Object} item The item to remove from the passed array.
-   *
-   * @return 'undefined'
-   */
-  removeObject: function(array, item) {
-    var index = utils.indexOf(array, item);
-    if (index !== -1) { array.splice(index, 1); }
-  },
-
-  _replace: function(array, idx, amt, objects) {
-    var args = [].concat(objects), chunk, ret = [],
-        // https://code.google.com/p/chromium/issues/detail?id=56588
-        size = 60000, start = idx, ends = amt, count;
-
-    while (args.length) {
-      count = ends > size ? size : ends;
-      if (count <= 0) { count = 0; }
-
-      chunk = args.splice(0, size);
-      chunk = [start, count].concat(chunk);
-
-      start += size;
-      ends -= count;
-
-      ret = ret.concat(splice.apply(array, chunk));
-    }
-    return ret;
-  },
-
-  /**
-   * Replaces objects in an array with the passed objects.
-   *
-   * ```javascript
-   *   var array = [1,2,3];
-   *   Ember.EnumerableUtils.replace(array, 1, 2, [4, 5]); // [1, 4, 5]
-   *
-   *   var array = [1,2,3];
-   *   Ember.EnumerableUtils.replace(array, 1, 1, [4, 5]); // [1, 4, 5, 3]
-   *
-   *   var array = [1,2,3];
-   *   Ember.EnumerableUtils.replace(array, 10, 1, [4, 5]); // [1, 2, 3, 4, 5]
-   * ```
-   * 
-   * @method replace
-   * @param {Array} array The array the objects should be inserted into.
-   * @param {Number} idx Starting index in the array to replace. If *idx* >=
-   * length, then append to the end of the array.
-   * @param {Number} amt Number of elements that should be removed from the array,
-   * starting at *idx*
-   * @param {Array} objects An array of zero or more objects that should be
-   * inserted into the array at *idx*
-   *
-   * @return {Array} The modified array.
-   */
-  replace: function(array, idx, amt, objects) {
-    if (array.replace) {
-      return array.replace(idx, amt, objects);
-    } else {
-      return utils._replace(array, idx, amt, objects);
-    }
-  },
-
-  /**
-   * Calculates the intersection of two arrays. This method returns a new array
-   * filled with the records that the two passed arrays share with each other. 
-   * If there is no intersection, an empty array will be returned.
-   *
-   * ```javascript
-   * var array1 = [1, 2, 3, 4, 5];
-   * var array2 = [1, 3, 5, 6, 7];
-   *
-   * Ember.EnumerableUtils.intersection(array1, array2); // [1, 3, 5]
-   *
-   * var array1 = [1, 2, 3];
-   * var array2 = [4, 5, 6];
-   *
-   * Ember.EnumerableUtils.intersection(array1, array2); // []
-   * ```
-   *
-   * @method intersection
-   * @param {Array} array1 The first array
-   * @param {Array} array2 The second array
-   *
-   * @return {Array} The intersection of the two passed arrays.
-   */
-  intersection: function(array1, array2) {
-    var intersection = [];
-
-    utils.forEach(array1, function(element) {
-      if (utils.indexOf(array2, element) >= 0) {
-        intersection.push(element);
-      }
-    });
-
-    return intersection;
-  }
-};
-
-})();
-
-
-
-(function() {
-/**
-@module ember-metal
-*/
-
-var META_KEY = Ember.META_KEY, get;
-
-var MANDATORY_SETTER = Ember.ENV.MANDATORY_SETTER;
-
-var IS_GLOBAL_PATH = /^([A-Z$]|([0-9][A-Z$])).*[\.\*]/;
-var HAS_THIS  = /^this[\.\*]/;
-var FIRST_KEY = /^([^\.\*]+)/;
-
-// ..........................................................
-// GET AND SET
-//
-// If we are on a platform that supports accessors we can use those.
-// Otherwise simulate accessors by looking up the property directly on the
-// object.
-
-/**
-  Gets the value of a property on an object. If the property is computed,
-  the function will be invoked. If the property is not defined but the
-  object implements the `unknownProperty` method then that will be invoked.
-
-  If you plan to run on IE8 and older browsers then you should use this
-  method anytime you want to retrieve a property on an object that you don't
-  know for sure is private. (Properties beginning with an underscore '_'
-  are considered private.)
-
-  On all newer browsers, you only need to use this method to retrieve
-  properties if the property might not be defined on the object and you want
-  to respect the `unknownProperty` handler. Otherwise you can ignore this
-  method.
-
-  Note that if the object itself is `undefined`, this method will throw
-  an error.
-
-  @method get
-  @for Ember
-  @param {Object} obj The object to retrieve from.
-  @param {String} keyName The property key to retrieve
-  @return {Object} the property value or `null`.
-*/
-get = function get(obj, keyName) {
-  // Helpers that operate with 'this' within an #each
-  if (keyName === '') {
-    return obj;
-  }
-
-  if (!keyName && 'string'===typeof obj) {
-    keyName = obj;
-    obj = null;
-  }
-
-    
-  if (obj === null || keyName.indexOf('.') !== -1) {
-    return getPath(obj, keyName);
-  }
-
-  var meta = obj[META_KEY], desc = meta && meta.descs[keyName], ret;
-  if (desc) {
-    return desc.get(obj, keyName);
-  } else {
-    if (MANDATORY_SETTER && meta && meta.watching[keyName] > 0) {
-      ret = meta.values[keyName];
-    } else {
-      ret = obj[keyName];
-    }
-
-    if (ret === undefined &&
-        'object' === typeof obj && !(keyName in obj) && 'function' === typeof obj.unknownProperty) {
-      return obj.unknownProperty(keyName);
-    }
-
-    return ret;
-  }
-};
-
-// Currently used only by Ember Data tests
-if (Ember.config.overrideAccessors) {
-  Ember.get = get;
-  Ember.config.overrideAccessors();
-  get = Ember.get;
-}
-
-/**
-  Normalizes a target/path pair to reflect that actual target/path that should
-  be observed, etc. This takes into account passing in global property
-  paths (i.e. a path beginning with a captial letter not defined on the
-  target) and * separators.
-
-  @private
-  @method normalizeTuple
-  @for Ember
-  @param {Object} target The current target. May be `null`.
-  @param {String} path A path on the target or a global property path.
-  @return {Array} a temporary array with the normalized target/path pair.
-*/
-var normalizeTuple = Ember.normalizeTuple = function(target, path) {
-  var hasThis  = HAS_THIS.test(path),
-      isGlobal = !hasThis && IS_GLOBAL_PATH.test(path),
-      key;
-
-  if (!target || isGlobal) target = Ember.lookup;
-  if (hasThis) path = path.slice(5);
-
-  if (target === Ember.lookup) {
-    key = path.match(FIRST_KEY)[0];
-    target = get(target, key);
-    path   = path.slice(key.length+1);
-  }
-
-  // must return some kind of path to be valid else other things will break.
-  if (!path || path.length===0) throw new Ember.Error('Path cannot be empty');
-
-  return [ target, path ];
-};
-
-var getPath = Ember._getPath = function(root, path) {
-  var hasThis, parts, tuple, idx, len;
-
-  // If there is no root and path is a key name, return that
-  // property from the global object.
-  // E.g. get('Ember') -> Ember
-  if (root === null && path.indexOf('.') === -1) { return get(Ember.lookup, path); }
-
-  // detect complicated paths and normalize them
-  hasThis  = HAS_THIS.test(path);
-
-  if (!root || hasThis) {
-    tuple = normalizeTuple(root, path);
-    root = tuple[0];
-    path = tuple[1];
-    tuple.length = 0;
-  }
-
-  parts = path.split(".");
-  len = parts.length;
-  for (idx = 0; root != null && idx < len; idx++) {
-    root = get(root, parts[idx], true);
-    if (root && root.isDestroyed) { return undefined; }
-  }
-  return root;
-};
-
-Ember.getWithDefault = function(root, key, defaultValue) {
-  var value = get(root, key);
-
-  if (value === undefined) { return defaultValue; }
-  return value;
-};
-
-
-Ember.get = get;
-
-})();
-
-
-
-(function() {
-/**
-@module ember-metal
-*/
-
-var o_create = Ember.create,
-    metaFor = Ember.meta,
-    META_KEY = Ember.META_KEY,
-    a_slice = [].slice,
-    /* listener flags */
-    ONCE = 1, SUSPENDED = 2;
-
-/*
-  The event system uses a series of nested hashes to store listeners on an
-  object. When a listener is registered, or when an event arrives, these
-  hashes are consulted to determine which target and action pair to invoke.
-
-  The hashes are stored in the object's meta hash, and look like this:
-
-      // Object's meta hash
-      {
-        listeners: {       // variable name: `listenerSet`
-          "foo:changed": [ // variable name: `actions`
-            target, method, flags
-          ]
-        }
-      }
-
-*/
-
-function indexOf(array, target, method) {
-  var index = -1;
-  // hashes are added to the end of the event array
-  // so it makes sense to start searching at the end
-  // of the array and search in reverse
-  for (var i = array.length - 3 ; i >=0; i -= 3) {
-    if (target === array[i] && method === array[i + 1]) {
-         index = i; break;
-    }
-  }
-  return index;
-}
-
-function actionsFor(obj, eventName) {
-  var meta = metaFor(obj, true),
-      actions;
-
-  if (!meta.listeners) { meta.listeners = {}; }
-
-  if (!meta.hasOwnProperty('listeners')) {
-    // setup inherited copy of the listeners object
-    meta.listeners = o_create(meta.listeners);
-  }
-
-  actions = meta.listeners[eventName];
-
-  // if there are actions, but the eventName doesn't exist in our listeners, then copy them from the prototype
-  if (actions && !meta.listeners.hasOwnProperty(eventName)) {
-    actions = meta.listeners[eventName] = meta.listeners[eventName].slice();
-  } else if (!actions) {
-    actions = meta.listeners[eventName] = [];
-  }
-
-  return actions;
-}
-
-function actionsUnion(obj, eventName, otherActions) {
-  var meta = obj[META_KEY],
-      actions = meta && meta.listeners && meta.listeners[eventName];
-
-  if (!actions) { return; }
-  for (var i = actions.length - 3; i >= 0; i -= 3) {
-    var target = actions[i],
-        method = actions[i+1],
-        flags = actions[i+2],
-        actionIndex = indexOf(otherActions, target, method);
-
-    if (actionIndex === -1) {
-      otherActions.push(target, method, flags);
-    }
-  }
-}
-
-function actionsDiff(obj, eventName, otherActions) {
-  var meta = obj[META_KEY],
-      actions = meta && meta.listeners && meta.listeners[eventName],
-      diffActions = [];
-
-  if (!actions) { return; }
-  for (var i = actions.length - 3; i >= 0; i -= 3) {
-    var target = actions[i],
-        method = actions[i+1],
-        flags = actions[i+2],
-        actionIndex = indexOf(otherActions, target, method);
-
-    if (actionIndex !== -1) { continue; }
-
-    otherActions.push(target, method, flags);
-    diffActions.push(target, method, flags);
-  }
-
-  return diffActions;
-}
-
-/**
-  Add an event listener
-
-  @method addListener
-  @for Ember
-  @param obj
-  @param {String} eventName
-  @param {Object|Function} targetOrMethod A target object or a function
-  @param {Function|String} method A function or the name of a function to be called on `target`
-  @param {Boolean} once A flag whether a function should only be called once
-*/
-function addListener(obj, eventName, target, method, once) {
-  
-  if (!method && 'function' === typeof target) {
-    method = target;
-    target = null;
-  }
-
-  var actions = actionsFor(obj, eventName),
-      actionIndex = indexOf(actions, target, method),
-      flags = 0;
-
-  if (once) flags |= ONCE;
-
-  if (actionIndex !== -1) { return; }
-
-  actions.push(target, method, flags);
-
-  if ('function' === typeof obj.didAddListener) {
-    obj.didAddListener(eventName, target, method);
-  }
-}
-
-/**
-  Remove an event listener
-
-  Arguments should match those passed to `Ember.addListener`.
-
-  @method removeListener
-  @for Ember
-  @param obj
-  @param {String} eventName
-  @param {Object|Function} targetOrMethod A target object or a function
-  @param {Function|String} method A function or the name of a function to be called on `target`
-*/
-function removeListener(obj, eventName, target, method) {
-  
-  if (!method && 'function' === typeof target) {
-    method = target;
-    target = null;
-  }
-
-  function _removeListener(target, method) {
-    var actions = actionsFor(obj, eventName),
-        actionIndex = indexOf(actions, target, method);
-
-    // action doesn't exist, give up silently
-    if (actionIndex === -1) { return; }
-
-    actions.splice(actionIndex, 3);
-
-    if ('function' === typeof obj.didRemoveListener) {
-      obj.didRemoveListener(eventName, target, method);
-    }
-  }
-
-  if (method) {
-    _removeListener(target, method);
-  } else {
-    var meta = obj[META_KEY],
-        actions = meta && meta.listeners && meta.listeners[eventName];
-
-    if (!actions) { return; }
-    for (var i = actions.length - 3; i >= 0; i -= 3) {
-      _removeListener(actions[i], actions[i+1]);
-    }
-  }
-}
-
-/**
-  Suspend listener during callback.
-
-  This should only be used by the target of the event listener
-  when it is taking an action that would cause the event, e.g.
-  an object might suspend its property change listener while it is
-  setting that property.
-
-  @method suspendListener
-  @for Ember
-
-  @private
-  @param obj
-  @param {String} eventName
-  @param {Object|Function} targetOrMethod A target object or a function
-  @param {Function|String} method A function or the name of a function to be called on `target`
-  @param {Function} callback
-*/
-function suspendListener(obj, eventName, target, method, callback) {
-  if (!method && 'function' === typeof target) {
-    method = target;
-    target = null;
-  }
-
-  var actions = actionsFor(obj, eventName),
-      actionIndex = indexOf(actions, target, method);
-
-  if (actionIndex !== -1) {
-    actions[actionIndex+2] |= SUSPENDED; // mark the action as suspended
-  }
-
-  function tryable()   { return callback.call(target); }
-  function finalizer() { if (actionIndex !== -1) { actions[actionIndex+2] &= ~SUSPENDED; } }
-
-  return Ember.tryFinally(tryable, finalizer);
-}
-
-/**
-  Suspends multiple listeners during a callback.
-
-  @method suspendListeners
-  @for Ember
-
-  @private
-  @param obj
-  @param {Array} eventName Array of event names
-  @param {Object|Function} targetOrMethod A target object or a function
-  @param {Function|String} method A function or the name of a function to be called on `target`
-  @param {Function} callback
-*/
-function suspendListeners(obj, eventNames, target, method, callback) {
-  if (!method && 'function' === typeof target) {
-    method = target;
-    target = null;
-  }
-
-  var suspendedActions = [],
-      actionsList = [],
-      eventName, actions, i, l;
-
-  for (i=0, l=eventNames.length; i<l; i++) {
-    eventName = eventNames[i];
-    actions = actionsFor(obj, eventName);
-    var actionIndex = indexOf(actions, target, method);
-
-    if (actionIndex !== -1) {
-      actions[actionIndex+2] |= SUSPENDED;
-      suspendedActions.push(actionIndex);
-      actionsList.push(actions);
-    }
-  }
-
-  function tryable() { return callback.call(target); }
-
-  function finalizer() {
-    for (var i = 0, l = suspendedActions.length; i < l; i++) {
-      var actionIndex = suspendedActions[i];
-      actionsList[i][actionIndex+2] &= ~SUSPENDED;
-    }
-  }
-
-  return Ember.tryFinally(tryable, finalizer);
-}
-
-/**
-  Return a list of currently watched events
-
-  @private
-  @method watchedEvents
-  @for Ember
-  @param obj
-*/
-function watchedEvents(obj) {
-  var listeners = obj[META_KEY].listeners, ret = [];
-
-  if (listeners) {
-    for(var eventName in listeners) {
-      if (listeners[eventName]) { ret.push(eventName); }
-    }
-  }
-  return ret;
-}
-
-/**
-  Send an event. The execution of suspended listeners
-  is skipped, and once listeners are removed. A listener without
-  a target is executed on the passed object. If an array of actions
-  is not passed, the actions stored on the passed object are invoked.
-
-  @method sendEvent
-  @for Ember
-  @param obj
-  @param {String} eventName
-  @param {Array} params Optional parameters for each listener.
-  @param {Array} actions Optional array of actions (listeners).
-  @return true
-*/
-function sendEvent(obj, eventName, params, actions) {
-  // first give object a chance to handle it
-  if (obj !== Ember && 'function' === typeof obj.sendEvent) {
-    obj.sendEvent(eventName, params);
-  }
-
-  if (!actions) {
-    var meta = obj[META_KEY];
-    actions = meta && meta.listeners && meta.listeners[eventName];
-  }
-
-  if (!actions) { return; }
-
-  for (var i = actions.length - 3; i >= 0; i -= 3) { // looping in reverse for once listeners
-    var target = actions[i], method = actions[i+1], flags = actions[i+2];
-    if (!method) { continue; }
-    if (flags & SUSPENDED) { continue; }
-    if (flags & ONCE) { removeListener(obj, eventName, target, method); }
-    if (!target) { target = obj; }
-    if ('string' === typeof method) { method = target[method]; }
-    if (params) {
-      method.apply(target, params);
-    } else {
-      method.call(target);
-    }
-  }
-  return true;
-}
-
-/**
-  @private
-  @method hasListeners
-  @for Ember
-  @param obj
-  @param {String} eventName
-*/
-function hasListeners(obj, eventName) {
-  var meta = obj[META_KEY],
-      actions = meta && meta.listeners && meta.listeners[eventName];
-
-  return !!(actions && actions.length);
-}
-
-/**
-  @private
-  @method listenersFor
-  @for Ember
-  @param obj
-  @param {String} eventName
-*/
-function listenersFor(obj, eventName) {
-  var ret = [];
-  var meta = obj[META_KEY],
-      actions = meta && meta.listeners && meta.listeners[eventName];
-
-  if (!actions) { return ret; }
-
-  for (var i = 0, l = actions.length; i < l; i += 3) {
-    var target = actions[i],
-        method = actions[i+1];
-    ret.push([target, method]);
-  }
-
-  return ret;
-}
-
-/**
-  Define a property as a function that should be executed when
-  a specified event or events are triggered.
-
-
-  ``` javascript
-  var Job = Ember.Object.extend({
-    logCompleted: Ember.on('completed', function(){
-      console.log('Job completed!');
-    })
-  });
-  var job = Job.create();
-  Ember.sendEvent(job, 'completed'); // Logs "Job completed!"
- ```
-
-  @method on
-  @for Ember
-  @param {String} eventNames*
-  @param {Function} func
-  @return func
-*/
-Ember.on = function(){
-  var func = a_slice.call(arguments, -1)[0],
-      events = a_slice.call(arguments, 0, -1);
-  func.__ember_listens__ = events;
-  return func;
-};
-
-Ember.addListener = addListener;
-Ember.removeListener = removeListener;
-Ember._suspendListener = suspendListener;
-Ember._suspendListeners = suspendListeners;
-Ember.sendEvent = sendEvent;
-Ember.hasListeners = hasListeners;
-Ember.watchedEvents = watchedEvents;
-Ember.listenersFor = listenersFor;
-Ember.listenersDiff = actionsDiff;
-Ember.listenersUnion = actionsUnion;
-
-})();
-
-
-
-(function() {
-var guidFor = Ember.guidFor,
-    sendEvent = Ember.sendEvent;
-
-/*
-  this.observerSet = {
-    [senderGuid]: { // variable name: `keySet`
-      [keyName]: listIndex
-    }
-  },
-  this.observers = [
-    {
-      sender: obj,
-      keyName: keyName,
-      eventName: eventName,
-      listeners: [
-        [target, method, flags]
-      ]
-    },
-    ...
-  ]
-*/
-var ObserverSet = Ember._ObserverSet = function() {
-  this.clear();
-};
-
-ObserverSet.prototype.add = function(sender, keyName, eventName) {
-  var observerSet = this.observerSet,
-      observers = this.observers,
-      senderGuid = guidFor(sender),
-      keySet = observerSet[senderGuid],
-      index;
-
-  if (!keySet) {
-    observerSet[senderGuid] = keySet = {};
-  }
-  index = keySet[keyName];
-  if (index === undefined) {
-    index = observers.push({
-      sender: sender,
-      keyName: keyName,
-      eventName: eventName,
-      listeners: []
-    }) - 1;
-    keySet[keyName] = index;
-  }
-  return observers[index].listeners;
-};
-
-ObserverSet.prototype.flush = function() {
-  var observers = this.observers, i, len, observer, sender;
-  this.clear();
-  for (i=0, len=observers.length; i < len; ++i) {
-    observer = observers[i];
-    sender = observer.sender;
-    if (sender.isDestroying || sender.isDestroyed) { continue; }
-    sendEvent(sender, observer.eventName, [sender, observer.keyName], observer.listeners);
-  }
-};
-
-ObserverSet.prototype.clear = function() {
-  this.observerSet = {};
-  this.observers = [];
-};
-})();
-
-
-
-(function() {
-var META_KEY = Ember.META_KEY,
-    guidFor = Ember.guidFor,
-    tryFinally = Ember.tryFinally,
-    sendEvent = Ember.sendEvent,
-    listenersUnion = Ember.listenersUnion,
-    listenersDiff = Ember.listenersDiff,
-    ObserverSet = Ember._ObserverSet,
-    beforeObserverSet = new ObserverSet(),
-    observerSet = new ObserverSet(),
-    deferred = 0;
-
-// ..........................................................
-// PROPERTY CHANGES
-//
-
-/**
-  This function is called just before an object property is about to change.
-  It will notify any before observers and prepare caches among other things.
-
-  Normally you will not need to call this method directly but if for some
-  reason you can't directly watch a property you can invoke this method
-  manually along with `Ember.propertyDidChange()` which you should call just
-  after the property value changes.
-
-  @method propertyWillChange
-  @for Ember
-  @param {Object} obj The object with the property that will change
-  @param {String} keyName The property key (or path) that will change.
-  @return {void}
-*/
-function propertyWillChange(obj, keyName) {
-  var m = obj[META_KEY],
-      watching = (m && m.watching[keyName] > 0) || keyName === 'length',
-      proto = m && m.proto,
-      desc = m && m.descs[keyName];
-
-  if (!watching) { return; }
-  if (proto === obj) { return; }
-  if (desc && desc.willChange) { desc.willChange(obj, keyName); }
-  dependentKeysWillChange(obj, keyName, m);
-  chainsWillChange(obj, keyName, m);
-  notifyBeforeObservers(obj, keyName);
-}
-Ember.propertyWillChange = propertyWillChange;
-
-/**
-  This function is called just after an object property has changed.
-  It will notify any observers and clear caches among other things.
-
-  Normally you will not need to call this method directly but if for some
-  reason you can't directly watch a property you can invoke this method
-  manually along with `Ember.propertyWillChange()` which you should call just
-  before the property value changes.
-
-  @method propertyDidChange
-  @for Ember
-  @param {Object} obj The object with the property that will change
-  @param {String} keyName The property key (or path) that will change.
-  @return {void}
-*/
-function propertyDidChange(obj, keyName) {
-  var m = obj[META_KEY],
-      watching = (m && m.watching[keyName] > 0) || keyName === 'length',
-      proto = m && m.proto,
-      desc = m && m.descs[keyName];
-
-  if (proto === obj) { return; }
-
-  // shouldn't this mean that we're watching this key?
-  if (desc && desc.didChange) { desc.didChange(obj, keyName); }
-  if (!watching && keyName !== 'length') { return; }
-
-  dependentKeysDidChange(obj, keyName, m);
-  chainsDidChange(obj, keyName, m, false);
-  notifyObservers(obj, keyName);
-}
-Ember.propertyDidChange = propertyDidChange;
-
-var WILL_SEEN, DID_SEEN;
-
-// called whenever a property is about to change to clear the cache of any dependent keys (and notify those properties of changes, etc...)
-function dependentKeysWillChange(obj, depKey, meta) {
-  if (obj.isDestroying) { return; }
-
-  var seen = WILL_SEEN, top = !seen;
-  if (top) { seen = WILL_SEEN = {}; }
-  iterDeps(propertyWillChange, obj, depKey, seen, meta);
-  if (top) { WILL_SEEN = null; }
-}
-
-// called whenever a property has just changed to update dependent keys
-function dependentKeysDidChange(obj, depKey, meta) {
-  if (obj.isDestroying) { return; }
-
-  var seen = DID_SEEN, top = !seen;
-  if (top) { seen = DID_SEEN = {}; }
-  iterDeps(propertyDidChange, obj, depKey, seen, meta);
-  if (top) { DID_SEEN = null; }
-}
-
-function iterDeps(method, obj, depKey, seen, meta) {
-  var guid = guidFor(obj);
-  if (!seen[guid]) seen[guid] = {};
-  if (seen[guid][depKey]) return;
-  seen[guid][depKey] = true;
-
-  var deps = meta.deps;
-  deps = deps && deps[depKey];
-  if (deps) {
-    for(var key in deps) {
-      var desc = meta.descs[key];
-      if (desc && desc._suspended === obj) continue;
-      method(obj, key);
-    }
-  }
-}
-
-function chainsWillChange(obj, keyName, m) {
-  if (!(m.hasOwnProperty('chainWatchers') &&
-        m.chainWatchers[keyName])) {
-    return;
-  }
-
-  var nodes = m.chainWatchers[keyName],
-      events = [],
-      i, l;
-
-  for(i = 0, l = nodes.length; i < l; i++) {
-    nodes[i].willChange(events);
-  }
-
-  for (i = 0, l = events.length; i < l; i += 2) {
-    propertyWillChange(events[i], events[i+1]);
-  }
-}
-
-function chainsDidChange(obj, keyName, m, suppressEvents) {
-  if (!(m && m.hasOwnProperty('chainWatchers') &&
-        m.chainWatchers[keyName])) {
-    return;
-  }
-
-  var nodes = m.chainWatchers[keyName],
-      events = suppressEvents ? null : [],
-      i, l;
-
-  for(i = 0, l = nodes.length; i < l; i++) {
-    nodes[i].didChange(events);
-  }
-
-  if (suppressEvents) {
-    return;
-  }
-
-  for (i = 0, l = events.length; i < l; i += 2) {
-    propertyDidChange(events[i], events[i+1]);
-  }
-}
-
-Ember.overrideChains = function(obj, keyName, m) {
-  chainsDidChange(obj, keyName, m, true);
-};
-
-/**
-  @method beginPropertyChanges
-  @chainable
-  @private
-*/
-function beginPropertyChanges() {
-  deferred++;
-}
-
-Ember.beginPropertyChanges = beginPropertyChanges;
-
-/**
-  @method endPropertyChanges
-  @private
-*/
-function endPropertyChanges() {
-  deferred--;
-  if (deferred<=0) {
-    beforeObserverSet.clear();
-    observerSet.flush();
-  }
-}
-
-Ember.endPropertyChanges = endPropertyChanges;
-
-/**
-  Make a series of property changes together in an
-  exception-safe way.
-
-  ```javascript
-  Ember.changeProperties(function() {
-    obj1.set('foo', mayBlowUpWhenSet);
-    obj2.set('bar', baz);
-  });
-  ```
-
-  @method changeProperties
-  @param {Function} callback
-  @param [binding]
-*/
-Ember.changeProperties = function(cb, binding) {
-  beginPropertyChanges();
-  tryFinally(cb, endPropertyChanges, binding);
-};
-
-function notifyBeforeObservers(obj, keyName) {
-  if (obj.isDestroying) { return; }
-
-  var eventName = keyName + ':before', listeners, diff;
-  if (deferred) {
-    listeners = beforeObserverSet.add(obj, keyName, eventName);
-    diff = listenersDiff(obj, eventName, listeners);
-    sendEvent(obj, eventName, [obj, keyName], diff);
-  } else {
-    sendEvent(obj, eventName, [obj, keyName]);
-  }
-}
-
-function notifyObservers(obj, keyName) {
-  if (obj.isDestroying) { return; }
-
-  var eventName = keyName + ':change', listeners;
-  if (deferred) {
-    listeners = observerSet.add(obj, keyName, eventName);
-    listenersUnion(obj, eventName, listeners);
-  } else {
-    sendEvent(obj, eventName, [obj, keyName]);
-  }
-}
-
-})();
-
-
-
-(function() {
-// META_KEY
-// _getPath
-// propertyWillChange, propertyDidChange
-
-var META_KEY = Ember.META_KEY,
-    MANDATORY_SETTER = Ember.ENV.MANDATORY_SETTER,
-    IS_GLOBAL = /^([A-Z$]|([0-9][A-Z$]))/,
-    getPath = Ember._getPath;
-
-/**
-  Sets the value of a property on an object, respecting computed properties
-  and notifying observers and other listeners of the change. If the
-  property is not defined but the object implements the `setUnknownProperty`
-  method then that will be invoked as well.
-
-  @method set
-  @for Ember
-  @param {Object} obj The object to modify.
-  @param {String} keyName The property key to set
-  @param {Object} value The value to set
-  @return {Object} the passed value.
-*/
-var set = function set(obj, keyName, value, tolerant) {
-  if (typeof obj === 'string') {
-        value = keyName;
-    keyName = obj;
-    obj = null;
-  }
-
-  
-  if (!obj || keyName.indexOf('.') !== -1) {
-    return setPath(obj, keyName, value, tolerant);
-  }
-
-    
-  var meta = obj[META_KEY], desc = meta && meta.descs[keyName],
-      isUnknown, currentValue;
-  if (desc) {
-    desc.set(obj, keyName, value);
-  } else {
-    isUnknown = 'object' === typeof obj && !(keyName in obj);
-
-    // setUnknownProperty is called if `obj` is an object,
-    // the property does not already exist, and the
-    // `setUnknownProperty` method exists on the object
-    if (isUnknown && 'function' === typeof obj.setUnknownProperty) {
-      obj.setUnknownProperty(keyName, value);
-    } else if (meta && meta.watching[keyName] > 0) {
-      if (MANDATORY_SETTER) {
-        currentValue = meta.values[keyName];
-      } else {
-        currentValue = obj[keyName];
-      }
-      // only trigger a change if the value has changed
-      if (value !== currentValue) {
-        Ember.propertyWillChange(obj, keyName);
-        if (MANDATORY_SETTER) {
-          if ((currentValue === undefined && !(keyName in obj)) || !obj.propertyIsEnumerable(keyName)) {
-            Ember.defineProperty(obj, keyName, null, value); // setup mandatory setter
-          } else {
-            meta.values[keyName] = value;
-          }
-        } else {
-          obj[keyName] = value;
-        }
-        Ember.propertyDidChange(obj, keyName);
-      }
-    } else {
-      obj[keyName] = value;
-    }
-  }
-  return value;
-};
-
-// Currently used only by Ember Data tests
-if (Ember.config.overrideAccessors) {
-  Ember.set = set;
-  Ember.config.overrideAccessors();
-  set = Ember.set;
-}
-
-function setPath(root, path, value, tolerant) {
-  var keyName;
-
-  // get the last part of the path
-  keyName = path.slice(path.lastIndexOf('.') + 1);
-
-  // get the first part of the part
-  path    = (path === keyName) ? keyName : path.slice(0, path.length-(keyName.length+1));
-
-  // unless the path is this, look up the first part to
-  // get the root
-  if (path !== 'this') {
-    root = getPath(root, path);
-  }
-
-  if (!keyName || keyName.length === 0) {
-    throw new Ember.Error('Property set failed: You passed an empty path');
-  }
-
-  if (!root) {
-    if (tolerant) { return; }
-    else { throw new Ember.Error('Property set failed: object in path "'+path+'" could not be found or was destroyed.'); }
-  }
-
-  return set(root, keyName, value);
-}
-
-Ember.set = set;
-
-/**
-  Error-tolerant form of `Ember.set`. Will not blow up if any part of the
-  chain is `undefined`, `null`, or destroyed.
-
-  This is primarily used when syncing bindings, which may try to update after
-  an object has been destroyed.
-
-  @method trySet
-  @for Ember
-  @param {Object} obj The object to modify.
-  @param {String} path The property path to set
-  @param {Object} value The value to set
-*/
-Ember.trySet = function(root, path, value) {
-  return set(root, path, value, true);
-};
-
-})();
-
-
-
-(function() {
-/**
-@module ember-metal
-*/
-
-/*
-  JavaScript (before ES6) does not have a Map implementation. Objects,
-  which are often used as dictionaries, may only have Strings as keys.
-
-  Because Ember has a way to get a unique identifier for every object
-  via `Ember.guidFor`, we can implement a performant Map with arbitrary
-  keys. Because it is commonly used in low-level bookkeeping, Map is
-  implemented as a pure JavaScript object for performance.
-
-  This implementation follows the current iteration of the ES6 proposal for
-  maps (http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets),
-  with two exceptions. First, because we need our implementation to be pleasant
-  on older browsers, we do not use the `delete` name (using `remove` instead).
-  Second, as we do not have the luxury of in-VM iteration, we implement a
-  forEach method for iteration.
-
-  Map is mocked out to look like an Ember object, so you can do
-  `Ember.Map.create()` for symmetry with other Ember classes.
-*/
-var set = Ember.set,
-    guidFor = Ember.guidFor,
-    indexOf = Ember.ArrayPolyfills.indexOf;
-
-var copy = function(obj) {
-  var output = {};
-
-  for (var prop in obj) {
-    if (obj.hasOwnProperty(prop)) { output[prop] = obj[prop]; }
-  }
-
-  return output;
-};
-
-var copyMap = function(original, newObject) {
-  var keys = original.keys.copy(),
-      values = copy(original.values);
-
-  newObject.keys = keys;
-  newObject.values = values;
-  newObject.length = original.length;
-
-  return newObject;
-};
-
-/**
-  This class is used internally by Ember and Ember Data.
-  Please do not use it at this time. We plan to clean it up
-  and add many tests soon.
-
-  @class OrderedSet
-  @namespace Ember
-  @constructor
-  @private
-*/
-var OrderedSet = Ember.OrderedSet = function() {
-  this.clear();
-};
-
-/**
-  @method create
-  @static
-  @return {Ember.OrderedSet}
-*/
-OrderedSet.create = function() {
-  return new OrderedSet();
-};
-
-
-OrderedSet.prototype = {
-  /**
-    @method clear
-  */
-  clear: function() {
-    this.presenceSet = {};
-    this.list = [];
-  },
-
-  /**
-    @method add
-    @param obj
-  */
-  add: function(obj) {
-    var guid = guidFor(obj),
-        presenceSet = this.presenceSet,
-        list = this.list;
-
-    if (guid in presenceSet) { return; }
-
-    presenceSet[guid] = true;
-    list.push(obj);
-  },
-
-  /**
-    @method remove
-    @param obj
-  */
-  remove: function(obj) {
-    var guid = guidFor(obj),
-        presenceSet = this.presenceSet,
-        list = this.list;
-
-    delete presenceSet[guid];
-
-    var index = indexOf.call(list, obj);
-    if (index > -1) {
-      list.splice(index, 1);
-    }
-  },
-
-  /**
-    @method isEmpty
-    @return {Boolean}
-  */
-  isEmpty: function() {
-    return this.list.length === 0;
-  },
-
-  /**
-    @method has
-    @param obj
-    @return {Boolean}
-  */
-  has: function(obj) {
-    var guid = guidFor(obj),
-        presenceSet = this.presenceSet;
-
-    return guid in presenceSet;
-  },
-
-  /**
-    @method forEach
-    @param {Function} fn
-    @param self
-  */
-  forEach: function(fn, self) {
-    // allow mutation during iteration
-    var list = this.toArray();
-
-    for (var i = 0, j = list.length; i < j; i++) {
-      fn.call(self, list[i]);
-    }
-  },
-
-  /**
-    @method toArray
-    @return {Array}
-  */
-  toArray: function() {
-    return this.list.slice();
-  },
-
-  /**
-    @method copy
-    @return {Ember.OrderedSet}
-  */
-  copy: function() {
-    var set = new OrderedSet();
-
-    set.presenceSet = copy(this.presenceSet);
-    set.list = this.toArray();
-
-    return set;
-  }
-};
-
-/**
-  A Map stores values indexed by keys. Unlike JavaScript's
-  default Objects, the keys of a Map can be any JavaScript
-  object.
-
-  Internally, a Map has two data structures:
-
-  1. `keys`: an OrderedSet of all of the existing keys
-  2. `values`: a JavaScript Object indexed by the `Ember.guidFor(key)`
-
-  When a key/value pair is added for the first time, we
-  add the key to the `keys` OrderedSet, and create or
-  replace an entry in `values`. When an entry is deleted,
-  we delete its entry in `keys` and `values`.
-
-  @class Map
-  @namespace Ember
-  @private
-  @constructor
-*/
-var Map = Ember.Map = function() {
-  this.keys = Ember.OrderedSet.create();
-  this.values = {};
-};
-
-/**
-  @method create
-  @static
-*/
-Map.create = function() {
-  return new Map();
-};
-
-Map.prototype = {
-  /**
-    This property will change as the number of objects in the map changes.
-   
-    @property length
-    @type number
-    @default 0
-  */
-  length: 0,
-    
-    
-  /**
-    Retrieve the value associated with a given key.
-
-    @method get
-    @param {*} key
-    @return {*} the value associated with the key, or `undefined`
-  */
-  get: function(key) {
-    var values = this.values,
-        guid = guidFor(key);
-
-    return values[guid];
-  },
-
-  /**
-    Adds a value to the map. If a value for the given key has already been
-    provided, the new value will replace the old value.
-
-    @method set
-    @param {*} key
-    @param {*} value
-  */
-  set: function(key, value) {
-    var keys = this.keys,
-        values = this.values,
-        guid = guidFor(key);
-
-    keys.add(key);
-    values[guid] = value;
-    set(this, 'length', keys.list.length);
-  },
-
-  /**
-    Removes a value from the map for an associated key.
-
-    @method remove
-    @param {*} key
-    @return {Boolean} true if an item was removed, false otherwise
-  */
-  remove: function(key) {
-    // don't use ES6 "delete" because it will be annoying
-    // to use in browsers that are not ES6 friendly;
-    var keys = this.keys,
-        values = this.values,
-        guid = guidFor(key);
-
-    if (values.hasOwnProperty(guid)) {
-      keys.remove(key);
-      delete values[guid];
-      set(this, 'length', keys.list.length);
-      return true;
-    } else {
-      return false;
-    }
-  },
-
-  /**
-    Check whether a key is present.
-
-    @method has
-    @param {*} key
-    @return {Boolean} true if the item was present, false otherwise
-  */
-  has: function(key) {
-    var values = this.values,
-        guid = guidFor(key);
-
-    return values.hasOwnProperty(guid);
-  },
-
-  /**
-    Iterate over all the keys and values. Calls the function once
-    for each key, passing in the key and value, in that order.
-
-    The keys are guaranteed to be iterated over in insertion order.
-
-    @method forEach
-    @param {Function} callback
-    @param {*} self if passed, the `this` value inside the
-      callback. By default, `this` is the map.
-  */
-  forEach: function(callback, self) {
-    var keys = this.keys,
-        values = this.values;
-
-    keys.forEach(function(key) {
-      var guid = guidFor(key);
-      callback.call(self, key, values[guid]);
-    });
-  },
-
-  /**
-    @method copy
-    @return {Ember.Map}
-  */
-  copy: function() {
-    return copyMap(this, new Map());
-  }
-};
-
-/**
-  @class MapWithDefault
-  @namespace Ember
-  @extends Ember.Map
-  @private
-  @constructor
-  @param [options]
-    @param {*} [options.defaultValue]
-*/
-var MapWithDefault = Ember.MapWithDefault = function(options) {
-  Map.call(this);
-  this.defaultValue = options.defaultValue;
-};
-
-/**
-  @method create
-  @static
-  @param [optio

<TRUNCATED>

[23/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/test/integration/processes/create_new_app_test.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/test/integration/processes/create_new_app_test.js b/contrib/views/slider/src/main/resources/ui/test/integration/processes/create_new_app_test.js
deleted file mode 100644
index 5be4d5b..0000000
--- a/contrib/views/slider/src/main/resources/ui/test/integration/processes/create_new_app_test.js
+++ /dev/null
@@ -1,358 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var appTypes = {
-  items: [
-    {
-      "id": "HBASE",
-      "instance_name": "SLIDER_1",
-      "typeComponents": [
-        {
-          "id": "HBASE_MASTER",
-          "name": "HBASE_MASTER",
-          "displayName": "HBASE_MASTER",
-          "instanceCount": 1,
-          "maxInstanceCount": 2,
-          "yarnMemory": 1024,
-          "yarnCpuCores": 1
-        },
-        {
-          "id": "HBASE_REGIONSERVER",
-          "name": "HBASE_REGIONSERVER",
-          "category": "SLAVE",
-          "displayName": "HBASE_REGIONSERVER",
-          "priority": 2,
-          "instanceCount": 2,
-          "maxInstanceCount": 0,
-          "yarnMemory": 1024,
-          "yarnCpuCores": 1
-        }
-      ],
-      "typeDescription": "Apache HBase is the Hadoop database, a distributed, scalable, big data store.\n        Requirements:\n        1. Ensure parent dir for path (hbase-site/hbase.rootdir) is accessible to the App owner.\n        2. Ensure ZK root (hbase-site/zookeeper.znode.parent) is unique for the App instance.",
-      "typeName": "HBASE",
-      "typePackageFileName": "hbase_v096.zip",
-      "typeVersion": "0.96.0.2.1.1",
-      "version": "1.0.0",
-      "view_name": "SLIDER",
-      "typeConfigs": {
-        "agent.conf": "/slider/agent/conf/agent.ini",
-        "application.def": "/slider/hbase_v096.zip",
-        "config_types": "core-site,hdfs-site,hbase-site",
-        "java_home": "/usr/jdk64/jdk1.7.0_45",
-        "package_list": "files/hbase-0.96.1-hadoop2-bin.tar.gz",
-        "site.core-site.fs.defaultFS": "${NN_URI}",
-        "site.global.app_install_dir": "${AGENT_WORK_ROOT}/app/install",
-        "site.global.metric_collector_host": "${NN_HOST}",
-        "site.global.metric_collector_port": "6118",
-        "site.global.metric_collector_lib": "file:///usr/lib/ambari-metrics-hadoop-sink/ambari-metrics-hadoop-sink.jar",
-        "site.global.hbase_master_heapsize": "1024m",
-        "site.global.hbase_regionserver_heapsize": "1024m",
-        "site.global.security_enabled": "false",
-        "site.global.user_group": "hadoop",
-        "site.hbase-site.hbase.client.keyvalue.maxsize": "10485760",
-        "site.hbase-site.hbase.client.scanner.caching": "100",
-        "site.hbase-site.zookeeper.znode.parent": "/hbase-unsecure",
-        "site.hdfs-site.dfs.namenode.https-address": "${NN_HOST}:50470"
-      }
-    }
-  ]
-};
-
-var selectors = {
-    buttonNext: 'button.next-btn',
-    buttonBack: '.btn-area button.btn:eq(1)',
-    step2: {
-      content: '#step2 table tbody'
-    },
-    step3: {
-      addPropertyButton: '#createAppWizard .add-property'
-    }
-  },
-  newApp = {
-    name: 'new_app',
-    type: 'HBASE',
-    includeFilePatterns: 'includeFilePatterns1',
-    excludeFilePatterns: 'excludeFilePatterns1',
-    frequency: '1',
-    queueName: 'queueName1',
-    specialLabel: 'specialLabel1',
-    selectedYarnLabel: 'selectedYarnLabel1',
-    components: {
-      HBASE_MASTER: 4,
-      HBASE_REGIONSERVER: 5
-    },
-    yarnLabel: 'SOME LABEL',
-    categoriesCount: 6,
-    newConfig: {
-      name: 'new_property',
-      value: 'new_value'
-    }
-  };
-
-QUnit.module('integration/processes - Create New App', {
-
-  setup: function () {
-
-    sinon.config.useFakeTimers = false;
-
-    $.mockjax({
-      type: 'GET',
-      url: '*',
-      status: '200',
-      dataType: 'json',
-      responseText: {}
-    });
-
-    Em.run(App, App.advanceReadiness);
-    Em.run(function () {
-      App.set('viewEnabled', true); // Important!
-      App.ApplicationTypeMapper.parse(appTypes);
-    });
-  },
-
-  teardown: function () {
-    App.reset();
-    $.mockjax.clear();
-  }
-
-});
-
-test('basic (no errors - just valid data)', function () {
-
-  /* STEP 1 */
-  visit('/createAppWizard/step1');
-  equal(find(selectors.buttonNext).attr('disabled'), 'disabled', '"Next"-button should be disabled at the beginning of Step 1');
-  equal(find('select.type-select option').length, 1, '1 App Type loaded - 1 App Type in select');
-  fillIn('#app-name-input', newApp.name);
-  andThen(function () {
-    equal(find(selectors.buttonNext).attr('disabled'), null, '"Next"-button should be enabled after user input a valid name');
-  });
-  click(selectors.buttonNext);
-  equal(find(selectors.buttonNext).attr('disabled'), 'disabled', '"Next"-button should be disabled after click on it');
-
-  andThen(function () {
-    /* STEP 2 */
-    equal(currentURL(), '/createAppWizard/step2', 'User comes to Step 2');
-
-    equal(find(selectors.buttonNext).attr('disabled'), null, '"Next"-button should be enabled at the beginning of Step 2');
-    equal(find(selectors.step2.content + ' tr').length, 2, 'Selected App Type has 2 components');
-    equal(find(selectors.step2.content + ' tr:eq(0) .numInstances').val(), '1', 'Component count for 1st component is valid by default');
-    equal(find(selectors.step2.content + ' tr:eq(1) .numInstances').val(), '2', 'Component count for 2nd component is valid by default');
-
-    fillIn(selectors.step2.content + ' tr:eq(0) .numInstances', newApp.components.HBASE_MASTER);
-    fillIn(selectors.step2.content + ' tr:eq(1) .numInstances', newApp.components.HBASE_REGIONSERVER);
-
-    equal(find(selectors.step2.content + ' tr:eq(0) .yarnLabel').attr('disabled'), 'disabled', 'YARN label input-field should be disabled by default');
-    find(selectors.step2.content + ' tr:eq(0) .checkbox-inline').click();
-    equal(find(selectors.step2.content + ' tr:eq(0) .yarnLabel').attr('disabled'), null, 'YARN label input-field should be enabled after checkbox checked');
-
-    click(selectors.buttonNext);
-    andThen(function () {
-      /* STEP 3 */
-      equal(currentURL(), '/createAppWizard/step3', 'User comes to Step 3');
-      equal(find(selectors.buttonNext).attr('disabled'), null, '"Next"-button should be enabled at the beginning of Step 3');
-      equal(find('.panel').length, newApp.categoriesCount, 'Config categories count');
-    });
-    // Add Custom Property
-    click('button.btn-link');
-    fillIn('.modal-dialog input:eq(0)', newApp.newConfig.name);
-    fillIn('.modal-dialog input:eq(1)', newApp.newConfig.value);
-    click('.modal-dialog .btn-success');
-
-    click(selectors.buttonNext);
-
-    andThen(function () {
-      /* STEP 4 */
-      equal(currentURL(), '/createAppWizard/step4', 'User comes to Step 4');
-      equal(find(selectors.buttonNext).attr('disabled'), null, '"Next"-button should be enabled at the beginning of Step 4');
-
-      ok(find('#step4').text().indexOf('App Name: ' + newApp.name) > -1, 'App Name exists');
-      ok(find('#step4').text().indexOf('App Type: ' + newApp.type) > -1, 'App Type exists');
-      ok(find('#step4').text().indexOf('HBASE_MASTER: ' + newApp.components.HBASE_MASTER) > -1, 'HBASE_MASTER count exists');
-      ok(find('#step4').text().indexOf('HBASE_REGIONSERVER: ' + newApp.components.HBASE_REGIONSERVER) > -1, 'HBASE_REGIONSERVER count exists');
-      ok(find('pre').text().indexOf('"' + newApp.newConfig.name + '":"' + newApp.newConfig.value + '"') > -1, 'Custom property exists');
-
-    });
-  });
-
-});
-
-test('check step1', function () {
-
-  visit('/createAppWizard/step1');
-  equal(find(selectors.buttonNext).attr('disabled'), 'disabled', '"Next"-button should be disabled at the beginning of Step 1');
-  fillIn('#app-name-input', '1s');
-  andThen(function () {
-    equal(find(selectors.buttonNext).attr('disabled'), 'disabled', '"Next"-button should be disabled because invalid name provided');
-  });
-
-  fillIn('#app-name-input', '-');
-  andThen(function () {
-    equal(find(selectors.buttonNext).attr('disabled'), 'disabled', '"Next"-button should be disabled because invalid name provided (2)');
-  });
-
-  fillIn('#app-name-input', 's$1');
-  andThen(function () {
-    equal(find(selectors.buttonNext).attr('disabled'), 'disabled', '"Next"-button should be disabled because invalid name provided (2)');
-  });
-
-  equal(find('.special-label').attr('disabled'), 'disabled', '"Special YARN label"-textfield should be disabled');
-  find('.special-label-radio').click();
-  equal(find('.special-label').attr('disabled'), null, '"Special YARN label"-textfield should be enabled if proper radio-button selected');
-
-});
-
-test('check step2', function () {
-
-  visit('/createAppWizard/step1');
-  fillIn('#app-name-input', newApp.name);
-  click(selectors.buttonNext);
-
-  andThen(function () {
-    fillIn(selectors.step2.content + ' tr:eq(0) .numInstances', -1);
-    andThen(function () {
-      equal(find(selectors.buttonNext).attr('disabled'), 'disabled', '"Next"-button should be disabled because invalid value provided for Instances count');
-      equal(find('.alert').length, 1, 'Alert-box is on page');
-    });
-    fillIn(selectors.step2.content + ' tr:eq(0) .numInstances', 1);
-    andThen(function () {
-      equal(find(selectors.buttonNext).attr('disabled'), null);
-      equal(find('.alert').length, 0, 'Alert-box is hidden');
-    });
-    fillIn(selectors.step2.content + ' tr:eq(0) .yarnMemory', -1);
-    andThen(function () {
-      equal(find(selectors.buttonNext).attr('disabled'), 'disabled', '"Next"-button should be disabled because invalid value provided for Memory');
-      equal(find('.alert').length, 1, 'Alert-box is on page');
-    });
-    fillIn(selectors.step2.content + ' tr:eq(0) .yarnMemory', 1024);
-    andThen(function () {
-      equal(find(selectors.buttonNext).attr('disabled'), null);
-      equal(find('.alert').length, 0, 'Alert-box is hidden');
-    });
-    fillIn(selectors.step2.content + ' tr:eq(0) .yarnCPU', -1);
-    andThen(function () {
-      equal(find(selectors.buttonNext).attr('disabled'), 'disabled', '"Next"-button should be disabled because invalid value provided for CPU Cores');
-      equal(find('.alert').length, 1, 'Alert-box is on page');
-    });
-    fillIn(selectors.step2.content + ' tr:eq(0) .yarnCPU', 1024);
-    andThen(function () {
-      equal(find(selectors.buttonNext).attr('disabled'), null);
-      equal(find('.alert').length, 0, 'Alert-box is hidden');
-    });
-
-    equal(find(selectors.step2.content + ' tr:eq(0) .yarnLabel').attr('disabled'), 'disabled', 'Labels-field is disabled by default');
-    find(selectors.step2.content + ' tr:eq(0) .checkbox-inline').click();
-    andThen(function () {
-      equal(find(selectors.step2.content + ' tr:eq(0) yarnLabel').attr('disabled'), null, 'Labels-field should be enabled when checkbox clicked');
-    });
-  });
-
-});
-
-test('check step2 back', function () {
-
-  visit('/createAppWizard/step1');
-  fillIn('#app-name-input', newApp.name);
-  fillIn('.includeFilePatterns', newApp.includeFilePatterns);
-  fillIn('.excludeFilePatterns', newApp.excludeFilePatterns);
-  fillIn('.frequency', newApp.frequency);
-  fillIn('.queueName', newApp.queueName);
-  find('.selectedYarnLabel:eq(2)').click();
-  fillIn('.special-label', newApp.specialLabel);
-  click(selectors.buttonNext);
-
-  andThen(function () {
-    click(selectors.buttonBack);
-    andThen(function () {
-      equal(find('#app-name-input').val(), newApp.name, 'Name is restored');
-      equal(find('.includeFilePatterns').val(), newApp.includeFilePatterns, 'includeFilePatterns is restored');
-      equal(find('.excludeFilePatterns').val(), newApp.excludeFilePatterns, 'excludeFilePatterns is restored');
-      equal(find('.frequency').val(), newApp.frequency, 'frequency is restored');
-      equal(find('.queueName').val(), newApp.queueName, 'queueName is restored');
-      equal(find('.special-label').val(), newApp.specialLabel, 'specialLabel is restored');
-    });
-  });
-
-});
-
-test('check step3', function () {
-
-  visit('/createAppWizard/step1');
-  fillIn('#app-name-input', newApp.name);
-  click(selectors.buttonNext);
-
-  andThen(function () {
-    click(selectors.buttonNext);
-
-    andThen(function () {
-      // Step 3
-
-      click(selectors.step3.addPropertyButton);
-      andThen(function () {
-        fillIn('.new-config-name:eq(0)', '!!');
-        click('.modal-dialog:eq(0) .btn-success');
-        andThen(function () {
-          equal(find('.modal-dialog:eq(0) .alert').length, 1, 'Error-message for invalid config name exists');
-        });
-
-        fillIn('.new-config-name:eq(0)', 'agent.conf'); // config already exists
-        click('.modal-dialog:eq(0) .btn-success');
-        andThen(function () {
-          equal(find('.modal-dialog:eq(0) .alert').length, 1, 'Error-message for existing config name');
-        });
-
-        click('.modal-dialog:eq(0) .btn-default');
-        andThen(function () {
-          click(selectors.step3.addPropertyButton);
-          andThen(function () {
-            equal(find('.new-config-name:eq(0)').val(), '', 'New config name should be empty on second modal opening');
-            equal(find('.new-config-value:eq(0)').val(), '', 'New config value should be empty on second modal opening');
-          });
-        });
-      });
-    });
-  });
-});
-
-test('check step3 back', function () {
-
-  visit('/createAppWizard/step1');
-  fillIn('#app-name-input', newApp.name);
-  click(selectors.buttonNext);
-
-  andThen(function () {
-    fillIn(selectors.step2.content + ' tr:eq(0) .numInstances', newApp.components.HBASE_MASTER);
-    find(selectors.step2.content + ' tr:eq(0) .checkbox-inline').click();
-    fillIn(selectors.step2.content + ' tr:eq(0) .yarnLabel', newApp.yarnLabel);
-    fillIn(selectors.step2.content + ' tr:eq(1) .numInstances', newApp.components.HBASE_REGIONSERVER);
-    click(selectors.buttonNext);
-
-    andThen(function () {
-      click(selectors.buttonBack);
-
-      andThen(function () {
-        equal(find(selectors.step2.content + ' tr:eq(0) .numInstances').val(), newApp.components.HBASE_MASTER, 'Components count restored');
-        equal(find(selectors.step2.content + ' tr:eq(0) .checkbox-inline').attr('checked'), 'checked', 'YARN label checkbox restored');
-        equal(find(selectors.step2.content + ' tr:eq(0) .yarnLabel').val(), newApp.yarnLabel, 'YARN label input restored');
-        equal(find(selectors.step2.content + ' tr:eq(0) .yarnLabel').attr('disabled'), null, 'YARN label input not disabled');
-        equal(find(selectors.step2.content + ' tr:eq(1) .numInstances').val(), newApp.components.HBASE_REGIONSERVER, 'Components count restored (2)');
-      });
-    });
-  });
-
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step1_controller_test.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step1_controller_test.js b/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step1_controller_test.js
deleted file mode 100644
index 57cf7a6..0000000
--- a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step1_controller_test.js
+++ /dev/null
@@ -1,431 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-moduleFor('controller:createAppWizardStep1', 'App.CreateAppWizardStep1Controller', {
-
-  needs: [
-    'controller:createAppWizard'
-  ],
-
-  setup: function () {
-    sinon.stub(App.ajax, 'send', Em.K);
-  },
-
-  teardown: function () {
-    App.ajax.send.restore();
-  }
-
-});
-
-var selectedType = Em.Object.create({
-  id: 'HBASE',
-  configs: {
-    n0: 'v0'
-  }
-});
-
-test('appWizardController', function () {
-
-  expect(1);
-
-  var controller = this.subject({
-    controllers: {
-      createAppWizard: {
-        key: 'value0'
-      }
-    }
-  });
-
-  Em.run(function () {
-    controller.set('controllers.createAppWizard.key', 'value1');
-  });
-
-  equal(controller.get('appWizardController.key'), 'value1', 'should link to App.CreateAppWizardController');
-
-});
-
-test('isAppTypesError', function () {
-
-  expect(2);
-
-  var controller = this.subject({availableTypes: {content: []}});
-  equal(controller.get('isAppTypesError'), true, 'should be true if no app types provided');
-
-  Em.run(function () {
-    controller.set('availableTypes', {content: [
-      {}
-    ]});
-  });
-  equal(controller.get('isAppTypesError'), false, 'should be false if app types provided');
-
-});
-
-test('typeDescription', function () {
-
-  expect(2);
-
-  var controller = this.subject();
-
-  equal(controller.get('typeDescription'), '', 'default typeDescription');
-
-  Em.run(function () {
-    controller.set('selectedType', Em.Object.create({
-      displayName: 'HBASE'
-    }));
-  });
-
-  equal(controller.get('typeDescription'), Em.I18n.t('wizard.step1.typeDescription').format('HBASE'), 'typeDescription is set from selectedType.displayName');
-
-});
-
-test('initializeNewApp', function () {
-
-  expect(9);
-
-  var controller = this.subject({
-      store: Em.Object.create({
-        all: function () {
-          return [];
-        }
-      })
-    }),
-    app = Em.Object.create({
-      name: 'n',
-      includeFilePatterns: 'i',
-      excludeFilePatterns: 'e',
-      frequency: 'f',
-      queueName: 'q',
-      specialLabel: 's',
-      selectedYarnLabel: 'y'
-    }),
-    title = '{0} should be taken from appWizardController.newApp';
-
-  Em.run(function () {
-    controller.initializeNewApp();
-  });
-
-  equal(controller.get('newApp.selectedYarnLabel'), 0, 'selectedYarnLabel should be 0 as default');
-
-  var values = Em.keys(controller.get('newApp')).without('appType').without('configs').without('selectedYarnLabel').map(function (item) {
-    return controller.get('newApp.' + item);
-  });
-
-  propEqual(values.uniq(), [false, ''], 'should set properties values to empty strings as default');
-
-  Em.run(function () {
-    controller.set('controllers.createAppWizard.newApp', app);
-    controller.initializeNewApp();
-  });
-
-  Em.keys(app).forEach(function (key) {
-    equal(controller.get('newApp.' + key), app.get(key), title.format(key));
-  });
-
-});
-
-test('loadAvailableTypes', function () {
-
-  expect(1);
-
-  var testObject = {
-      key: 'value'
-    },
-    controller = this.subject({
-    store: Em.Object.create({
-      all: function () {
-        return testObject;
-      }
-    })
-  });
-
-  Em.run(function () {
-    controller.loadAvailableTypes();
-  });
-
-  propEqual(controller.get('availableTypes'), testObject, 'availableTypes should be loaded from store');
-
-});
-
-test('nameValidator', function () {
-  expect(7);
-
-  var tests = [
-    { name: 'Slider', e: true },
-    { name: '_slider', e: true },
-    { name: 'slider*2', e: true },
-    { name: 'slider', e: false },
-    { name: 'slider_1-2_3', e: false }
-  ];
-
-  var controller = this.subject({isNameError: false,
-    store: Em.Object.create({
-      all: function (key) {
-        return {
-          sliderApp: [
-            { name: 'slider2' }
-          ]
-        }[key];
-      }
-    })
-  });
-
-  tests.forEach(function (test) {
-    Em.run(function () {
-      controller.set('newApp', { name: test.name});
-    });
-
-    equal(controller.get('isNameError'), test.e, 'Name `' + test.name + '` is' + (!!test.e ? ' not ' : ' ') + 'valid');
-  });
-
-  Em.run(function () {
-    controller.set('newApp', { name: 'slider2'});
-  });
-
-  equal(controller.get('isNameError'), true, 'Name `slider2` already exist');
-  equal(controller.get('nameErrorMessage'), Em.I18n.t('wizard.step1.nameRepeatError'), 'Error message should be shown');
-});
-
-test('validateAppNameSuccessCallback', function () {
-
-  expect(5);
-
-  var title = 'newApp should have {0} set',
-    controller = this.subject({
-      newApp: Em.Object.create(),
-      selectedType: selectedType
-    });
-
-  Em.run(function () {
-    controller.set('appWizardController.transitionToRoute', Em.K);
-    controller.validateAppNameSuccessCallback();
-  });
-
-  deepEqual(controller.get('newApp.appType'), selectedType, title.format('appType'));
-  deepEqual(controller.get('newApp.configs'), selectedType.configs, title.format('configs'));
-  deepEqual(controller.get('newApp.predefinedConfigNames'), Em.keys(selectedType.configs), title.format('predefinedConfigNames'));
-  deepEqual(controller.get('appWizardController.newApp'), controller.get('newApp'), 'newApp should be set in CreateAppWizardController');
-  equal(controller.get('appWizardController.currentStep'), 2, 'should proceed to the next step');
-
-});
-
-test('validateAppNameErrorCallback', function () {
-
-  expect(7);
-
-  var controller = this.subject();
-
-  Em.run(function () {
-    sinon.stub(Bootstrap.ModalManager, 'open', Em.K);
-    sinon.stub(controller, 'defaultErrorHandler', Em.K);
-    controller.validateAppNameErrorCallback({
-      status: 409
-    }, null, null, null, {
-      name: 'name'
-    });
-  });
-
-  ok(Bootstrap.ModalManager.open.calledOnce, 'app name conflict popup should be displayed');
-  ok(!controller.defaultErrorHandler.called, 'defaultErrorHandler shouldn\'t be executed');
-
-  Em.run(function () {
-    Bootstrap.ModalManager.open.restore();
-    controller.defaultErrorHandler.restore();
-    sinon.stub(Bootstrap.ModalManager, 'open', Em.K);
-    sinon.stub(controller, 'defaultErrorHandler', Em.K);
-    controller.validateAppNameErrorCallback({
-      status: 400
-    }, null, null, {
-      url: 'url',
-      type: 'type'
-    }, null);
-  });
-
-  ok(!Bootstrap.ModalManager.open.called, 'app name conflict popup shouldn\'t be displayed');
-  ok(controller.defaultErrorHandler.calledOnce, 'defaultErrorHandler should be executed');
-  propEqual(controller.defaultErrorHandler.firstCall.args[0], {
-    status: 400
-  }, 'should pass request info to defaultErrorHandler');
-  equal(controller.defaultErrorHandler.firstCall.args[1], 'url', 'should pass url to defaultErrorHandler');
-  equal(controller.defaultErrorHandler.firstCall.args[2], 'type', 'should pass type to defaultErrorHandler');
-
-  Bootstrap.ModalManager.open.restore();
-  controller.defaultErrorHandler.restore();
-
-});
-
-test('validateAppNameCompleteCallback', function () {
-
-  expect(1);
-
-  var controller = this.subject({
-    validateAppNameRequestExecuting: true
-  });
-
-  Em.run(function () {
-    controller.validateAppNameCompleteCallback();
-  });
-
-  ok(!controller.get('validateAppNameRequestExecuting'), 'validateAppNameRequestExecuting should be set to false');
-
-});
-
-test('isSubmitDisabled', function () {
-
-  expect(6);
-
-  var controller = this.subject({
-      availableTypes: {
-        content: [
-          {}
-        ]
-      },
-      isNameError: false,
-      newApp: {
-        name: 'some'
-      }
-    }),
-    cases = [
-      {
-        key: 'validateAppNameRequestExecuting',
-        title: 'request is executing'
-      },
-      {
-        key: 'isNameError',
-        title: 'app name is invalid'
-      },
-      {
-        key: 'isAppTypesError',
-        title: 'no app types are available'
-      },
-      {
-        key: 'isFrequencyError',
-        title: 'frequency value is invalid'
-      }
-    ],
-    keys = cases.mapProperty('key'),
-    failTitle = 'submit button is disabled when {0}';
-
-  equal(controller.get('isSubmitDisabled'), false);
-
-  cases.forEach(function (item) {
-    Em.run(function () {
-      keys.forEach(function (key) {
-        controller.set(key, item.key != key);
-      });
-    });
-    equal(controller.get('isSubmitDisabled'), true, failTitle.format(item.title));
-  });
-
-  Em.run(function () {
-    keys.forEach(function (key) {
-      controller.set(key, true);
-    });
-    controller.set('newApp.name', '');
-  });
-  equal(controller.get('isSubmitDisabled'), true, failTitle.format('no app name is specified'));
-
-});
-
-test('frequencyValidator', function () {
-
-  expect(8);
-
-  var controller = this.subject(),
-    cases = [
-      {
-        value: '123',
-        isFrequencyError: false,
-        frequencyErrorMessage: '',
-        title: 'numeric value'
-      },
-      {
-        value: '123a',
-        isFrequencyError: true,
-        frequencyErrorMessage: Em.I18n.t('wizard.step1.frequencyError'),
-        title: 'value contains letter'
-      },
-      {
-        value: '123-',
-        isFrequencyError: true,
-        frequencyErrorMessage: Em.I18n.t('wizard.step1.frequencyError'),
-        title: 'value contains special symbol'
-      },
-      {
-        value: '123 ',
-        isFrequencyError: true,
-        frequencyErrorMessage: Em.I18n.t('wizard.step1.frequencyError'),
-        title: 'value contains space'
-      }
-    ],
-    errorTitle = '{0}: isFrequencyError is set correctly',
-    messageTitle = '{0}: error message is set correctly';
-
-  cases.forEach(function (item) {
-    Em.run(function () {
-      controller.set('newApp', {
-        frequency: item.value
-      });
-    });
-    equal(controller.get('isFrequencyError'), item.isFrequencyError, errorTitle.format(item.title));
-    equal(controller.get('frequencyErrorMessage'), item.frequencyErrorMessage, messageTitle.format(item.title));
-  });
-
-});
-
-test('saveApp', function () {
-
-  expect(4);
-
-  var controller = this.subject({
-      newApp: Em.Object.create(),
-      selectedType: selectedType
-    }),
-    saveAppTitle = 'newApp should have {0} set';
-
-  Em.run(function () {
-    controller.saveApp();
-  });
-
-  propEqual(controller.get('newApp.appType'), selectedType, saveAppTitle.format('appType'));
-  propEqual(controller.get('newApp.configs'), selectedType.configs, saveAppTitle.format('configs'));
-  deepEqual(controller.get('newApp.predefinedConfigNames'), Em.keys(selectedType.configs), saveAppTitle.format('predefinedConfigNames'));
-  propEqual(controller.get('appWizardController.newApp'), controller.get('newApp'), 'newApp should be set in CreateAppWizardController');
-
-});
-
-test('actions.submit', function () {
-
-  expect(3);
-
-  var controller = this.subject({
-    validateAppNameRequestExecuting: false,
-    validateAppNameSuccessCallback: Em.K,
-    newApp: {
-      name: 'name'
-    }
-  });
-
-  Em.run(function () {
-    controller.send('submit');
-  });
-
-  ok(controller.get('validateAppNameRequestExecuting'), 'validateAppNameRequestExecuting should be set to true');
-  ok(App.ajax.send.calledOnce, 'request to server should be sent');
-  equal(App.ajax.send.firstCall.args[0].data.name, 'name', 'name should be passed');
-
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step2_controller_test.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step2_controller_test.js b/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step2_controller_test.js
deleted file mode 100644
index 5115a64..0000000
--- a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step2_controller_test.js
+++ /dev/null
@@ -1,403 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-moduleFor('controller:createAppWizardStep2', 'App.CreateAppWizardStep2Controller', {
-
-  needs: [
-    'controller:createAppWizard'
-  ]
-
-});
-
-var title = 'should be {0}';
-
-test('appWizardController', function () {
-
-  expect(1);
-
-  var controller = this.subject({
-    controllers: {
-      createAppWizard: {
-        key: 'value0'
-      }
-    }
-  });
-
-  Em.run(function () {
-    controller.set('controllers.createAppWizard.key', 'value1');
-  });
-
-  equal(controller.get('appWizardController.key'), 'value1', 'should link to App.CreateAppWizardController');
-
-});
-
-test('isError', function () {
-
-  expect(18);
-
-  var cases = [
-      {
-        content: [],
-        isError: false
-      },
-      {
-        content: [
-          Em.Object.create()
-        ],
-        isError: true
-      },
-      {
-        content: [
-          Em.Object.create({
-            numInstances: '0'
-          })
-        ],
-        isError: true
-      },
-      {
-        content: [
-          Em.Object.create({
-            yarnMemory: '0'
-          })
-        ],
-        isError: true
-      },
-      {
-        content: [
-          Em.Object.create({
-            yarnCPU: '0'
-          })
-        ],
-        isError: true
-      },
-      {
-        content: [
-          Em.Object.create({
-            numInstances: ' \r\n',
-            yarnMemory: ' \r\n',
-            yarnCPU: ' \r\n'
-          })
-        ],
-        isError: true
-      },
-      {
-        content: [
-          Em.Object.create({
-            numInstances: 'n',
-            yarnMemory: '0',
-            yarnCPU: '0'
-          })
-        ],
-        isError: true
-      },
-      {
-        content: [
-          Em.Object.create({
-            numInstances: '0',
-            yarnMemory: 'n',
-            yarnCPU: '0'
-          })
-        ],
-        isError: true
-      },
-      {
-        content: [
-          Em.Object.create({
-            numInstances: '0',
-            yarnMemory: '0',
-            yarnCPU: 'n'
-          })
-        ],
-        isError: true
-      },
-      {
-        content: [
-          Em.Object.create({
-            numInstances: '0.5',
-            yarnMemory: '0',
-            yarnCPU: '0'
-          })
-        ],
-        isError: true
-      },
-      {
-        content: [
-          Em.Object.create({
-            numInstances: '0',
-            yarnMemory: '0.5',
-            yarnCPU: '0'
-          })
-        ],
-        isError: true
-      },
-      {
-        content: [
-          Em.Object.create({
-            numInstances: '0',
-            yarnMemory: '0',
-            yarnCPU: '0.5'
-          })
-        ],
-        isError: true
-      },
-      {
-        content: [
-          Em.Object.create({
-            numInstances: '-1',
-            yarnMemory: '0',
-            yarnCPU: '0'
-          })
-        ],
-        isError: true
-      },
-      {
-        content: [
-          Em.Object.create({
-            numInstances: '0',
-            yarnMemory: '-1',
-            yarnCPU: '0'
-          })
-        ],
-        isError: true
-      },
-      {
-        content: [
-          Em.Object.create({
-            numInstances: '0',
-            yarnMemory: '0',
-            yarnCPU: '-1'
-          })
-        ],
-        isError: true
-      },
-      {
-        content: [
-          Em.Object.create({
-            numInstances: '0',
-            yarnMemory: '0',
-            yarnCPU: '0'
-          }),
-          Em.Object.create({
-            numInstances: '-1',
-            yarnMemory: '0',
-            yarnCPU: '0'
-          })
-        ],
-        isError: true
-      },
-      {
-        content: [
-          Em.Object.create({
-            numInstances: '0',
-            yarnMemory: '0',
-            yarnCPU: '0'
-          })
-        ],
-        isError: false
-      },
-      {
-        content: [
-          Em.Object.create({
-            numInstances: '0',
-            yarnMemory: '0',
-            yarnCPU: '0'
-          }),
-          Em.Object.create({
-            numInstances: '1',
-            yarnMemory: '1',
-            yarnCPU: '1'
-          })
-        ],
-        isError: false
-      }
-    ],
-    controller = this.subject();
-
-  cases.forEach(function (item) {
-
-    Em.run(function () {
-      controller.set('content', item.content);
-    });
-
-    equal(controller.get('isError'), item.isError, title.format(item.isError));
-
-  });
-
-});
-
-test('isSubmitDisabled', function () {
-
-  expect(2);
-
-  var cases = [true, false],
-  controller = this.subject();
-
-  cases.forEach(function (item) {
-
-    Em.run(function () {
-      controller.set('isError', item);
-    });
-
-    equal(controller.get('isSubmitDisabled'), item, title.format(item));
-
-  });
-
-});
-
-test('initializeNewApp', function () {
-
-  expect(4);
-
-  var controller = this.subject();
-
-  Em.run(function () {
-    controller.set('controllers.createAppWizard.newApp', {
-      components: [
-        Em.Object.create({
-          name: 'n'
-        })
-      ]
-    });
-    controller.initializeNewApp();
-  });
-
-  equal(controller.get('newApp.components.length'), 1, 'newApp should be taken from appWizardController');
-  equal(controller.get('newApp.components')[0].get('name'), 'n', 'newApp has correct names of components');
-  equal(controller.get('content.length'), 1, 'content should be taken from appWizardController');
-  equal(controller.get('content')[0].get('name'), 'n', 'content has correct names of components');
-
-});
-
-test('loadTypeComponents', function () {
-
-  expect(8);
-
-  var toStringTitle = 'should convert {0} to string',
-    controller = this.subject();
-
-  Em.run(function () {
-    controller.set('newApp', {
-      appType: {
-        components: [
-          Em.Object.create({
-            name: 'n0',
-            defaultNumInstances: 0,
-            defaultYARNMemory: 128,
-            defaultYARNCPU: 1
-          })
-        ]
-      }
-    });
-    controller.set('controllers.createAppWizard.newApp', {
-      components: [
-        Em.Object.create({
-          name: 'n1'
-        })
-      ]
-    });
-    controller.loadTypeComponents();
-  });
-
-  equal(controller.get('content.length'), 1, 'content should contain one item');
-  equal(controller.get('content')[0].get('name'), 'n1', 'should take components from wizard controller');
-
-  Em.run(function () {
-    controller.get('content').clear();
-    controller.get('controllers.createAppWizard.newApp.components').clear();
-    controller.loadTypeComponents();
-  });
-
-  equal(controller.get('content.length'), 1, 'content contains one item');
-  equal(controller.get('content')[0].get('name'), 'n0', 'should take components from step controller');
-  deepEqual(controller.get('content')[0].get('numInstances'), '0', toStringTitle.format('numInstances'));
-  deepEqual(controller.get('content')[0].get('yarnMemory'), '128', toStringTitle.format('yarnMemory'));
-  deepEqual(controller.get('content')[0].get('yarnCPU'), '1', toStringTitle.format('yarnCPU'));
-
-  Em.run(function () {
-    controller.get('content').clear();
-    controller.get('controllers.createAppWizard.newApp.components').clear();
-    controller.get('newApp.appType.components').clear();
-    controller.loadTypeComponents();
-  });
-
-  equal(controller.get('content.length'), 0, 'content should remain empty');
-
-});
-
-test('isNotInteger', function () {
-
-  expect(6);
-
-  var controller = this.subject({});
-  equal(controller.isNotInteger('1'), false, 'Valid value');
-  equal(controller.isNotInteger('-1'), true, 'Invalid value (1)');
-  equal(controller.isNotInteger('bbb'), true, 'Invalid value (2)');
-  equal(controller.isNotInteger('1a'), true, 'Invalid value (3)');
-  equal(controller.isNotInteger('!@#$%^'), true, 'Invalid value (4)');
-  equal(controller.isNotInteger(null), true, 'Invalid value (5)');
-
-});
-
-test('saveComponents', function () {
-
-  expect(2);
-
-  var controller = this.subject({
-    content: [
-      Em.Object.create({
-        name: 'n'
-      })
-    ]
-  });
-
-  Em.run(function () {
-    controller.set('controllers.createAppWizard.newApp', {});
-    controller.saveComponents();
-  });
-
-  equal(controller.get('appWizardController.newApp.components.length'), 1, 'components in wizard controller should be set from content');
-  equal(controller.get('appWizardController.newApp.components')[0].get('name'), 'n', 'components in wizard controller have correct names');
-
-});
-
-test('actions.submit', function () {
-
-  expect(3);
-
-  var controller = this.subject({
-    content: [
-      Em.Object.create({
-        name: 'n'
-      })
-    ]
-  });
-
-  Em.run(function () {
-    controller.get('controllers.createAppWizard').setProperties({
-      newApp: {},
-      currentStep: 2,
-      transitionToRoute: Em.K
-    });
-    controller.send('submit');
-  });
-
-  equal(controller.get('appWizardController.newApp.components.length'), 1, 'components in wizard controller should be set from content');
-  equal(controller.get('appWizardController.newApp.components')[0].get('name'), 'n', 'components in wizard controller have correct names');
-  equal(controller.get('appWizardController.currentStep'), '3', 'should go to step3');
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step3_controller_test.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step3_controller_test.js b/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step3_controller_test.js
deleted file mode 100644
index 17d66e4..0000000
--- a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step3_controller_test.js
+++ /dev/null
@@ -1,421 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-moduleFor('controller:createAppWizardStep3', 'App.CreateAppWizardStep3Controller', {
-
-  needs: [
-    'controller:createAppWizard'
-  ],
-
-  teardown: function () {
-    App.reset();
-  }
-
-});
-
-test('appWizardController', function () {
-
-  expect(1);
-
-  var controller = this.subject({
-    controllers: {
-      createAppWizard: {
-        key: 'value0'
-      }
-    }
-  });
-
-  Em.run(function () {
-    controller.set('controllers.createAppWizard.key', 'value1');
-  });
-
-  equal(controller.get('appWizardController.key'), 'value1', 'should link to App.CreateAppWizardController');
-
-});
-
-test('newAppConfigs', function () {
-
-  expect(1);
-
-  var configs = {
-      java_home: '/usr/jdk64/jdk1.7.0_40'
-    },
-    controller = this.subject();
-
-  Em.run(function () {
-    controller.set('controllers.createAppWizard.newApp', {
-      configs: configs
-    });
-  });
-
-  propEqual(controller.get('newAppConfigs'), configs, 'configs should be taken from wizard controller');
-
-});
-
-test('sectionKeys', function () {
-
-  expect(2);
-
-  var cases = [
-      {
-        sectionKeys: ['general', 'custom'],
-        title: 'no newAppConfigs set'
-      },
-      {
-        newAppConfigs: {
-          'p0': 'v0',
-          'site.p1': 'v1',
-          'site.p2.0': 'v2',
-          'site.p2.1': 'v3'
-        },
-        sectionKeys: ['general', 'p1', 'p2', 'custom'],
-        title: 'newAppConfigs are set'
-      }
-    ],
-    controller = this.subject();
-
-  cases.forEach(function (item) {
-
-    Em.run(function () {
-      controller.set('controllers.createAppWizard.newApp', {
-        configs: item.newAppConfigs
-      });
-    });
-
-    propEqual(controller.get('sectionKeys'), item.sectionKeys, item.title);
-
-  });
-
-});
-
-test('loadStep', function () {
-
-  expect(3);
-
-  var controller = this.subject();
-
-  Em.run(function () {
-    sinon.stub(controller, 'clearStep', Em.K);
-    sinon.stub(controller, 'initConfigs', Em.K);
-    controller.loadStep();
-  });
-
-  ok(controller.clearStep.calledOnce, 'clearStep should be executed');
-  ok(controller.initConfigs.calledOnce, 'initConfigs should be executed');
-  ok(controller.initConfigs.firstCall.args[0], 'true should be passed as argument to initConfigs');
-
-  controller.clearStep.restore();
-  controller.initConfigs.restore();
-
-});
-
-test('initConfigs', function () {
-
-  expect(15);
-
-  var controller = this.subject(),
-    titleDefault = 'should set default {0} property value',
-    titleCustom = 'should set custom {0} property value',
-    titleGlobal = 'should set global {0} property value',
-    titleLabel = 'label shouldn\'t contain \'site.\'';
-
-  Em.run(function () {
-    App.setProperties({
-      javaHome: '/usr/jdk64/jdk1.7.0_45',
-      metricsHost: 'host0',
-      metricsPort: '3333',
-      metricsLibPath: '/metrics/lib'
-    });
-    controller.get('controllers.createAppWizard').setProperties({
-      'content': {},
-      'newApp': {
-        'appType': {
-          'configs': {}
-        },
-        'configs': {
-          'java_home': '/usr/jdk64/jdk1.7.0_40',
-          'site.global.metric_collector_host': 'host1',
-          'site.global.metric_collector_port': '8080',
-          'site.global.metric_collector_lib': '/ams/lib'
-        }
-      }
-    });
-    controller.initConfigs(true);
-  });
-
-  equal(controller.get('configs').findBy('name', 'java_home').get('value'), '/usr/jdk64/jdk1.7.0_45', titleGlobal.format('java_home'));
-  equal(controller.get('configs').findBy('name', 'java_home').get('label'), 'java_home', 'label should be equal to name');
-  equal(controller.get('configs').findBy('name', 'ams_metrics').configs.findBy('name', 'site.global.metric_collector_host')
-    .get('value'), 'host0', titleGlobal.format('site.global.metric_collector_host'));
-  equal(controller.get('configs').findBy('name', 'ams_metrics').configs.findBy('name', 'site.global.metric_collector_port')
-    .get('value'), '3333', titleGlobal.format('site.global.metric_collector_port'));
-  equal(controller.get('configs').findBy('name', 'ams_metrics').configs.findBy('name', 'site.global.metric_collector_lib')
-    .get('value'), '/metrics/lib', titleGlobal.format('site.global.metric_collector_lib'));
-  equal(controller.get('configs').findBy('name', 'ams_metrics').configs.findBy('name', 'site.global.metric_collector_host')
-    .get('label'), 'global.metric_collector_host', titleLabel);
-  equal(controller.get('configs').findBy('name', 'ams_metrics').configs.findBy('name', 'site.global.metric_collector_port')
-    .get('label'), 'global.metric_collector_port', titleLabel);
-  equal(controller.get('configs').findBy('name', 'ams_metrics').configs.findBy('name', 'site.global.metric_collector_lib')
-    .get('label'), 'global.metric_collector_lib', titleLabel);
-
-  Em.run(function () {
-    App.setProperties({
-      javaHome: null,
-      metricsHost: null,
-      metricsPort: null,
-      metricsLibPath: null
-    });
-    controller.initConfigs();
-  });
-
-  equal(controller.get('configs').findBy('name', 'java_home').get('value'), '/usr/jdk64/jdk1.7.0_40', titleCustom.format('java_home'));
-  equal(controller.get('configs').findBy('name', 'ams_metrics').configs.findBy('name', 'site.global.metric_collector_host')
-    .get('value'), 'host1', titleGlobal.format('site.global.metric_collector_host'));
-  equal(controller.get('configs').findBy('name', 'ams_metrics').configs.findBy('name', 'site.global.metric_collector_port')
-    .get('value'), '8080', titleGlobal.format('site.global.metric_collector_port'));
-  equal(controller.get('configs').findBy('name', 'ams_metrics').configs.findBy('name', 'site.global.metric_collector_lib')
-    .get('value'), '/ams/lib', titleGlobal.format('site.global.metric_collector_lib'));
-
-  Em.run(function () {
-    controller.get('controllers.createAppWizard').setProperties({
-      'newApp': {
-        'appType': {
-          'configs':  {
-            'site.global.metric_collector_host': 'host3',
-            'site.global.metric_collector_port': '8888',
-            'site.global.metric_collector_lib': '/var/ams/lib'
-          }
-        },
-        'configs': {}
-      }
-    });
-    controller.initConfigs();
-  });
-
-  equal(controller.get('configs').findBy('name', 'ams_metrics').configs.findBy('name', 'site.global.metric_collector_host')
-    .get('value'), 'host3', titleDefault.format('site.global.metric_collector_host'));
-  equal(controller.get('configs').findBy('name', 'ams_metrics').configs.findBy('name', 'site.global.metric_collector_port')
-    .get('value'), '8888', titleDefault.format('site.global.metric_collector_port'));
-  equal(controller.get('configs').findBy('name', 'ams_metrics').configs.findBy('name', 'site.global.metric_collector_lib')
-    .get('value'), '/var/ams/lib', titleDefault.format('site.global.metric_collector_lib'));
-
-});
-
-test('initConfigSetDependencies', function () {
-
-  expect(1);
-
-  var configSet = {
-      dependencies: [
-        {
-          name: 'App.javaHome'
-        }
-      ]
-    },
-    javaHome = '/usr/jdk64/jdk1.7.0_40',
-    controller = this.subject();
-
-  Em.run(function () {
-    App.set('javaHome', javaHome);
-    controller.initConfigSetDependencies(configSet);
-  });
-
-  equal(configSet.dependencies[0].map, javaHome, 'should set map property');
-
-});
-
-test('clearStep', function () {
-
-  expect(1);
-
-  var controller = this.subject();
-
-  Em.run(function () {
-    controller.clearStep();
-  });
-
-  ok(!controller.get('isError'), 'isError should be false');
-
-});
-
-test('validateConfigs', function () {
-
-  expect(4);
-
-  var controller = this.subject({
-    configs: [
-      {
-        isSet: false,
-        name: 'p0',
-        value: 'v0'
-      }
-    ]
-  });
-
-  ok(controller.validateConfigs(), 'configs are valid');
-  propEqual(controller.get('configsObject'), {
-    p0: 'v0'
-  }, 'configsObject is set');
-
-  Em.run(function () {
-    controller.set('addConfigSetProperties', function () {
-      return null;
-    });
-  });
-
-  ok(!controller.validateConfigs(), 'configs are invalid');
-  ok(controller.get('isError'), 'isError is set to true');
-
-});
-
-test('addConfigSetProperties', function () {
-
-  expect(1);
-
-  var configs = [
-      {
-        isSet: false,
-        configs: [
-          {
-            name: 'p0',
-            value: 'v0'
-          }
-        ]
-      },
-      {
-        isSet: true,
-        trigger: {},
-        configs: [
-          {
-            name: 'p1',
-            value: 'v1'
-          }
-        ]
-      },
-      {
-        isSet: true,
-        trigger: {
-          name: 'p2',
-          value: 'v2'
-        },
-        configs: [
-          {
-            name: 'p3',
-            value: 'v3'
-          }
-        ]
-      }
-    ],
-    controller = this.subject();
-
-    deepEqual(controller.addConfigSetProperties(configs), [configs[0], configs[2].configs[0]], 'should add config from config sets to general configs array');
-
-});
-
-test('saveConfigs', function () {
-
-  expect(5);
-
-  var configsObject = {
-      p0: 'v0'
-    },
-    controller = this.subject({
-      configsObject: configsObject
-    }),
-    metricsCases = [
-      {
-        configsObject: {
-          'site.global.metrics_enabled': null
-        }
-      },
-      {
-        configsObject: {
-          'site.global.metrics_enabled': 'true',
-          'site.global.metric_collector_host': 'h0',
-          'site.global.metric_collector_port': '3333'
-        },
-        metricsEnabledExpected: 'true'
-      },
-      {
-        configsObject: {
-          'site.global.metrics_enabled': 'true',
-          'site.global.metric_collector_host': null,
-          'site.global.metric_collector_port': '8080'
-        },
-        metricsEnabledExpected: 'false'
-      },
-      {
-        configsObject: {
-          'site.global.metrics_enabled': 'true',
-          'site.global.metric_collector_host': 'h1',
-          'site.global.metric_collector_port': null
-        },
-        metricsEnabledExpected: 'false'
-      }
-    ],
-    metricsTitle = 'site.global.metrics_enabled should be {0}';
-
-  Em.run(function () {
-    controller.set('controllers.createAppWizard.newApp', {});
-    controller.saveConfigs();
-  });
-
-  propEqual(controller.get('controllers.createAppWizard.newApp.configs'), configsObject, 'configs are saved to wizard controller');
-
-  metricsCases.forEach(function (item) {
-    controller.reopen({
-      configsObject: item.configsObject
-    });
-    controller.set('controllers.createAppWizard.newApp', {});
-    controller.saveConfigs();
-    equal(controller.get('controllers.createAppWizard.newApp.configs')['site.global.metrics_enabled'],
-      item.metricsEnabledExpected, metricsTitle.format(item.metricsEnabledExpected || 'undefined'));
-  }, this);
-
-});
-
-test('actions.submit', function () {
-
-  expect(2);
-
-  var configsObject = {
-      p0: 'v0'
-    },
-    controller = this.subject({
-      configs: [
-        {
-          isSet: false,
-          name: 'p0',
-          value: 'v0'
-        }
-      ]
-    });
-
-  Em.run(function () {
-    controller.get('controllers.createAppWizard').setProperties({
-      newApp: {},
-      currentStep: 3,
-      transitionToRoute: Em.K
-    });
-    controller.send('submit');
-  });
-
-  propEqual(controller.get('controllers.createAppWizard.newApp.configs'), configsObject, 'configs are passed to wizard controller');
-  equal(controller.get('controllers.createAppWizard.currentStep'), 4, 'should go to step4');
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step4_controller_test.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step4_controller_test.js b/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step4_controller_test.js
deleted file mode 100644
index acaecaa..0000000
--- a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step4_controller_test.js
+++ /dev/null
@@ -1,440 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-moduleFor('controller:createAppWizardStep4', 'App.CreateAppWizardStep4Controller', {
-
-  needs: [
-    'controller:createAppWizard'
-  ],
-
-  setup: function () {
-    sinon.stub(App.ajax, 'send', Em.K);
-  },
-
-  teardown: function () {
-    App.ajax.send.restore();
-    App.reset();
-  }
-
-});
-
-test('appWizardController', function () {
-
-  expect(1);
-
-  var controller = this.subject({
-    controllers: {
-      createAppWizard: {
-        key: 'value0'
-      }
-    }
-  });
-
-  Em.run(function () {
-    controller.set('controllers.createAppWizard.key', 'value1');
-  });
-
-  equal(controller.get('appWizardController.key'), 'value1', 'should link to App.CreateAppWizardController');
-
-});
-
-test('isSubmitDisabled', function () {
-
-  expect(3);
-
-  var controller = this.subject({
-    newApp: Em.Object.create({
-      appType: {
-        index: 'test',
-        version: 'test'
-      },
-      name: test,
-      configs: [],
-      components: [],
-      queue: 'test',
-      queueName: 'test'
-    })
-  });
-
-  equal(controller.get('isSubmitDisabled'), false, 'should be false by default');
-
-  controller.sendAppDataToServer();
-  equal(controller.get('isSubmitDisabled'), true, 'should be true after sendAppDataToServer call');
-
-  controller.sendAppDataToServerCompleteCallback();
-  equal(controller.get('isSubmitDisabled'), false, 'should be false after sendAppDataToServerCompleteCallback call');
-
-});
-
-test('configsFormatted', function () {
-
-  expect(1);
-
-  var controller = this.subject();
-
-  Em.run(function () {
-    controller.set('newApp', {
-      configs: {
-        p0: 'v0',
-        p1: 'v1',
-        p2: 'v2'
-      }
-    });
-  });
-
-  equal(controller.get('configsFormatted'), '"p0":"v0",\n"p1":"v1",\n"p2":"v2"', 'configs formatted correctly');
-
-});
-
-test('resourcesFormatted', function () {
-
-  expect(18);
-
-  var propertiesCases = [
-      {
-        propertyName: 'numInstances',
-        expectedPropertyName: 'instanceCount',
-        value: '1'
-      },
-      {
-        propertyName: 'yarnMemory',
-        expectedPropertyName: 'yarnMemory',
-        value: '256'
-      },
-      {
-        propertyName: 'yarnCPU',
-        expectedPropertyName: 'yarnCpuCores',
-        value: '2'
-      },
-      {
-        propertyName: 'priority',
-        expectedPropertyName: 'priority',
-        value: 2
-      }
-    ],
-    globalCases = [
-      {
-        includeFilePatterns: null,
-        includeFilePatternsExpected: null,
-        excludeFilePatterns: null,
-        excludeFilePatternsExpected: null,
-        frequency: '1000',
-        frequencyExpected: '1000',
-        title: 'all parameters except one are null'
-      },
-      {
-        includeFilePatterns: '*.log',
-        includeFilePatternsExpected: '*.log',
-        excludeFilePatterns: '*.zip',
-        excludeFilePatternsExpected: '*.zip',
-        frequency: '1000',
-        frequencyExpected: '1000',
-        title: 'all parameters are valid'
-      }
-    ],
-    globalCasesUndefined = [
-      {
-        includeFilePatterns: null,
-        excludeFilePatterns: null,
-        frequency: null,
-        title: 'no patterns and frequency specified'
-      },
-      {
-        includeFilePatterns: ' \r\n',
-        excludeFilePatterns: null,
-        frequency: null,
-        title: 'one parameter is empty string after trimming'
-      }
-    ],
-    selectedYarnLabelCases = [
-      {
-        selectedYarnLabel: 0,
-        components: []
-      },
-      {
-        selectedYarnLabel: 1,
-        yarnLabelExpression: ''
-      },
-      {
-        selectedYarnLabel: 2,
-        specialLabel: 'specialLabel',
-        yarnLabelExpression: 'specialLabel'
-      }
-    ],
-    title = '{0} should be {1}',
-    selectedYarnLabelTitle = 'selected YARN label is {0}',
-    label = 'label',
-    controller = this.subject({
-      newApp: Em.Object.create({
-        components: [
-          Em.Object.create({
-            name: 'c',
-            numInstances: '0',
-            yarnMemory: '512',
-            yarnCPU: '1',
-            priority: 1
-          })
-        ]
-      })
-    });
-
-  propertiesCases.forEach(function (item) {
-
-    Em.run(function () {
-      controller.get('newApp.components')[0].set(item.propertyName, item.value);
-    });
-
-    equal(controller.get('resourcesFormatted.components')[0][item.expectedPropertyName], item.value, title.format(item.expectedPropertyName, item.value));
-
-  });
-
-  Em.run(function () {
-    controller.get('newApp.components')[0].setProperties({
-      yarnLabelChecked: false,
-      yarnLabel: label
-    });
-  });
-
-  ok(!controller.get('resourcesFormatted.components')[0].yarnLabel, 'yarnLabel shouldn\'t be set');
-
-  Em.run(function () {
-    controller.get('newApp.components')[0].set('yarnLabelChecked', true);
-  });
-
-  equal(controller.get('resourcesFormatted.components')[0].yarnLabel, label, title.format('yarnLabel', '\'' + label + '\''));
-
-  Em.run(function () {
-    controller.get('newApp.components')[0].set('yarnLabel', ' ' + label + '\n');
-  });
-
-  equal(controller.get('resourcesFormatted.components')[0].yarnLabel, label, 'yarnLabel should be trimmed');
-
-  globalCases.forEach(function (item) {
-
-    Em.run(function () {
-      controller.get('newApp').setProperties({
-        includeFilePatterns: item.includeFilePatterns,
-        excludeFilePatterns: item.excludeFilePatterns,
-        frequency: item.frequency
-      });
-      controller.notifyPropertyChange('newApp.components.@each.numInstances');
-    });
-
-    var global = controller.get('resourcesFormatted.global');
-
-    deepEqual(global['yarn.log.include.patterns'], item.includeFilePatternsExpected, item.title);
-    deepEqual(global['yarn.log.exclude.patterns'], item.excludeFilePatternsExpected, item.title);
-    deepEqual(global['yarn.log.interval'], item.frequencyExpected, item.title);
-
-  });
-
-  globalCasesUndefined.forEach(function (item) {
-
-    Em.run(function () {
-      controller.get('newApp').setProperties({
-        includeFilePatterns: item.includeFilePatterns,
-        excludeFilePatterns: item.excludeFilePatterns,
-        frequency: item.frequency
-      });
-      controller.notifyPropertyChange('newApp.components.@each.numInstances');
-    });
-
-    equal(typeof controller.get('resourcesFormatted.global'), 'undefined', item.title);
-
-  });
-
-  selectedYarnLabelCases.forEach(function (item) {
-
-    Em.run(function () {
-      controller.get('newApp').setProperties({
-        selectedYarnLabel: item.selectedYarnLabel,
-        specialLabel: item.specialLabel
-      });
-      controller.notifyPropertyChange('newApp.components.@each.numInstances');
-    });
-
-    var message = selectedYarnLabelTitle.format(item.selectedYarnLabel);
-
-    if (Em.isNone(item.yarnLabelExpression)) {
-      ok(!controller.get('resourcesFormatted.components').isAny('id', 'slider-appmaster'), message);
-    } else {
-      equal(controller.get('resourcesFormatted.components').findBy('id', 'slider-appmaster')['yarn.label.expression'],
-        item.yarnLabelExpression, message);
-    }
-
-  });
-
-});
-
-test('loadStep', function () {
-
-  expect(1);
-
-  var controller = this.subject();
-
-  Em.run(function () {
-    sinon.stub(controller, 'initializeNewApp', Em.K);
-    controller.loadStep();
-  });
-
-  ok(controller.initializeNewApp.calledOnce, 'initializeNewApp should be executed');
-
-  controller.initializeNewApp.restore();
-
-});
-
-test('initializeNewApp', function () {
-
-  expect(1);
-
-  var newApp = {
-      key: 'value'
-    },
-    controller = this.subject({
-      controllers: {
-        createAppWizard: {
-          newApp: newApp
-        }
-      }
-    });
-
-  Em.run(function () {
-    controller.loadStep();
-  });
-
-  propEqual(controller.get('newApp'), newApp, 'should initialize new app');
-
-});
-
-test('sendAppDataToServerSuccessCallback', function () {
-
-  expect(1);
-
-  var controller = this.subject();
-
-  Em.run(function () {
-    sinon.stub(controller.get('appWizardController'), 'hidePopup', Em.K);
-    controller.sendAppDataToServerSuccessCallback();
-  });
-
-  ok(controller.get('appWizardController').hidePopup.calledOnce, 'popup should be closed');
-
-  controller.get('appWizardController').hidePopup.restore();
-
-});
-
-test('sendAppDataToServerCompleteCallback', function () {
-
-  expect(1);
-
-  var controller = this.subject({
-    isSubmitDisabled: true
-  });
-
-  Em.run(function () {
-    controller.sendAppDataToServerCompleteCallback();
-  });
-
-  ok(!controller.get('isSubmitDisabled'), 'Finish button should be enabled');
-
-});
-
-test('sendAppDataToServer', function () {
-
-  var controller = this.subject({
-      newApp: Em.Object.create({
-        appType: {
-          index: 'ACCUMULO',
-          version: '1'
-        },
-        name: 'name',
-        twoWaySSLEnabled: false,
-        configs: {
-          key: 'value'
-        }
-      }),
-      resourcesFormatted: {
-        components: []
-      }
-    }),
-    cases = [
-      {
-        queueName: null,
-        title: 'queueName not set'
-      },
-      {
-        queueName: ' \n',
-        title: 'empty queueName value'
-      },
-      {
-        queueName: ' queue\n',
-        queue: 'queue',
-        title: 'queueName set correctly'
-      }
-    ];
-
-  Em.run(function () {
-    controller.sendAppDataToServer();
-  });
-
-  ok(controller.get('isSubmitDisabled'), 'Finish button should be disabled');
-  ok(App.ajax.send.calledOnce, 'request to server should be sent');
-
-  cases.forEach(function (item) {
-
-    Em.run(function () {
-      controller.set('newApp.queueName', item.queueName);
-      controller.sendAppDataToServer();
-    });
-
-    var data = {
-      typeName: 'ACCUMULO',
-      typeVersion: '1',
-      name: 'name',
-      twoWaySSLEnabled: 'false',
-      resources: {
-        components: []
-      },
-      typeConfigs: {
-        key: 'value'
-      }
-    };
-    if (item.queue) {
-      data.queue = item.queue;
-    }
-
-    propEqual(App.ajax.send.lastCall.args[0].data.data, data, item.title);
-
-  });
-
-});
-
-test('actions.finish', function () {
-
-  var controller = this.subject();
-
-  Em.run(function () {
-    sinon.stub(controller, 'sendAppDataToServer', Em.K);
-    controller.send('finish');
-  });
-
-  ok(controller.sendAppDataToServer.calledOnce, 'data should be sent to server');
-
-  controller.sendAppDataToServer.restore();
-
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/test/unit/controllers/create_app_wizard_controller_test.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/create_app_wizard_controller_test.js b/contrib/views/slider/src/main/resources/ui/test/unit/controllers/create_app_wizard_controller_test.js
deleted file mode 100644
index 14ad1e3..0000000
--- a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/create_app_wizard_controller_test.js
+++ /dev/null
@@ -1,201 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-moduleFor('controller:createAppWizard', 'App.CreateAppWizardController');
-
-var stepCases = [
-    {
-      currentStep: 0,
-      step: 5,
-      fromNextButton: true,
-      expectedCurrentStep: 0
-    },
-    {
-      currentStep: 1,
-      step: 0,
-      fromNextButton: true,
-      expectedCurrentStep: 1
-    },
-    {
-      currentStep: 2,
-      step: 3,
-      fromNextButton: false,
-      expectedCurrentStep: 2
-    },
-    {
-      currentStep: 0,
-      step: 1,
-      fromNextButton: true,
-      expectedCurrentStep: 1
-    }
-  ],
-  currentStepTitle = 'currentStep should be {0}',
-  newApp = {
-    configs: {
-      n0: 'v0'
-    },
-    predefinedConfigNames: []
-  };
-
-test('loadStep', function () {
-
-  var controller = this.subject({
-    transitionToRoute: Em.K
-  });
-
-  Em.run(function () {
-    controller.loadStep();
-  });
-
-  equal(controller.get('currentStep'), 1, 'currentStep should be 1');
-
-});
-
-test('gotoStep', function () {
-
-  var controller = this.subject({
-    transitionToRoute: Em.K
-  });
-
-  stepCases.forEach(function (item) {
-
-    Em.run(function () {
-      controller.set('currentStep', item.currentStep);
-      controller.gotoStep(item.step, item.fromNextButton);
-    });
-
-    equal(controller.get('currentStep'), item.expectedCurrentStep, currentStepTitle.format(item.expectedCurrentStep));
-
-  });
-
-});
-
-test('actions.gotoStep', function () {
-
-  var controller = this.subject({
-    transitionToRoute: Em.K
-  });
-
-  stepCases.rejectBy('fromNextButton').forEach(function (item) {
-
-    Em.run(function () {
-      controller.set('currentStep', item.currentStep);
-      controller.send('gotoStep', item.step);
-    });
-
-    equal(controller.get('currentStep'), item.expectedCurrentStep, currentStepTitle.format(item.expectedCurrentStep));
-
-  });
-
-});
-
-test('gotoStep', function () {
-
-  var createAppWizardController = this.subject({
-    transitionToRoute: Em.K,
-    newApp: newApp
-  });
-
-  Em.run(function () {
-    createAppWizardController.gotoStep(1);
-  });
-
-  propEqual(createAppWizardController.get('newApp.configs', {}, 'custom configs should be dropped'));
-
-});
-
-test('actions.gotoStep', function () {
-
-  var createAppWizardController = this.subject({
-    transitionToRoute: Em.K,
-    newApp: newApp
-  });
-
-  Em.run(function () {
-    createAppWizardController.send('gotoStep', 1);
-  });
-
-  propEqual(createAppWizardController.get('newApp.configs', {}, 'custom configs should be dropped'));
-
-});
-
-test('dropCustomConfigs', function () {
-
-  var controller = this.subject({
-    newApp: {
-      configs: {
-        n0: 'v0',
-        n1: 'v1'
-      },
-      predefinedConfigNames: ['n0']
-    }
-  });
-
-  Em.run(function () {
-    controller.dropCustomConfigs();
-  });
-
-  propEqual(controller.get('newApp.configs'), {n0: 'v0'}, 'custom configs should be dropped');
-
-});
-
-test('nextStep', function () {
-
-  var controller = this.subject({
-    transitionToRoute: Em.K,
-    currentStep: 1
-  });
-
-  Em.run(function () {
-    controller.nextStep();
-  });
-
-  equal(controller.get('currentStep'), '2', 'should go to step2');
-
-});
-
-test('prevStep', function () {
-
-  var controller = this.subject({
-    transitionToRoute: Em.K,
-    currentStep: 2
-  });
-
-  Em.run(function () {
-    controller.prevStep();
-  });
-
-  equal(controller.get('currentStep'), '1', 'should go to step1');
-
-});
-
-test('hidePopup', function () {
-
-  var controller = this.subject({
-    viewEnabled: true,
-    transitionToRoute: Em.K,
-    newApp: {}
-  });
-
-  Em.run(function () {
-    controller.hidePopup();
-  });
-
-  equal(controller.get('newApp'), null, 'should erase app data');
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_app/summary_controller_test.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_app/summary_controller_test.js b/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_app/summary_controller_test.js
deleted file mode 100644
index 33aa2a0..0000000
--- a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_app/summary_controller_test.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-moduleFor('controller:sliderAppSummary', 'App.SliderAppSummaryController');
-
-test('appType', function () {
-
-  var sliderAppSummaryController = this.subject({
-    model: {
-      appType: {
-        displayName: 'name1'
-      }
-    }
-  });
-  equal(sliderAppSummaryController.get('appType'), 'name1');
-  Em.run(function() {
-    sliderAppSummaryController.set('model.appType.displayName', 'name2');
-  });
-  equal(sliderAppSummaryController.get('appType'), 'name2');
-
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_app_controller_test.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_app_controller_test.js b/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_app_controller_test.js
deleted file mode 100644
index b9d632e..0000000
--- a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_app_controller_test.js
+++ /dev/null
@@ -1,607 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-moduleFor('controller:sliderApp', 'App.SliderAppController', {
-
-  needs: [
-    'component:bs-modal'
-  ],
-
-  setup: function () {
-    sinon.stub(Bootstrap.ModalManager, 'register', Em.K);
-    sinon.stub(Bootstrap.ModalManager, 'open', Em.K);
-    sinon.stub(App.ajax, 'send', Em.K);
-    sinon.stub(Bootstrap.ModalManager, 'close', Em.K);
-  },
-
-  teardown: function () {
-    Bootstrap.ModalManager.register.restore();
-    Bootstrap.ModalManager.open.restore();
-    App.ajax.send.restore();
-    Bootstrap.ModalManager.close.restore();
-  }
-
-});
-
-test('availableActions', function () {
-
-  var controller = this.subject({model: Em.Object.create({status: ''})});
-  controller.set('model.status', App.SliderApp.Status.accepted);
-  deepEqual(controller.get('availableActions').mapBy('action'), ['freeze'], 'actions for ACCEPTED');
-
-  Em.run(function () {
-    controller.set('model.status', App.SliderApp.Status.failed);
-  });
-  deepEqual(controller.get('availableActions').findBy('title', 'Advanced').submenu.mapBy('action'), ['destroy'], 'actions for FAILED');
-
-  Em.run(function () {
-    controller.set('model.status', App.SliderApp.Status.finished);
-  });
-  deepEqual(controller.get('availableActions').findBy('title', 'Advanced').submenu.mapBy('action'), ['destroy'], 'actions for FINISHED');
-  ok(controller.get('availableActions').mapBy('action').contains('thaw'), 'actions for FINISHED (2)');
-
-  Em.run(function () {
-    controller.set('model.status', App.SliderApp.Status.killed);
-  });
-  deepEqual(controller.get('availableActions').findBy('title', 'Advanced').submenu.mapBy('action'), ['destroy'], 'actions for KILLED');
-
-  Em.run(function () {
-    controller.set('model.status', App.SliderApp.Status.new);
-  });
-  deepEqual(controller.get('availableActions').mapBy('action'), ['freeze'], 'actions for NEW');
-
-  Em.run(function () {
-    controller.set('model.status', App.SliderApp.Status.new_saving);
-  });
-  deepEqual(controller.get('availableActions').mapBy('action'), ['freeze'], 'actions for NEW_SAVING');
-
-  Em.run(function () {
-    controller.set('model.status', App.SliderApp.Status.running);
-  });
-  deepEqual(controller.get('availableActions').mapBy('action'), ['freeze', 'flex'], 'actions for RUNNING');
-
-  Em.run(function () {
-    controller.set('model.status', App.SliderApp.Status.frozen);
-  });
-  deepEqual(controller.get('availableActions').findBy('title', 'Advanced').submenu.mapBy('action'), ['destroy'], 'actions for FROZEN');
-  ok(controller.get('availableActions').mapBy('action').contains('thaw'), 'actions for FROZEN (2)');
-
-});
-
-test('sliderAppTabs', function () {
-
-  var cases = [
-      {
-        length: 1
-      },
-      {
-        configs: {},
-        length: 1
-      },
-      {
-        configs: {
-          n0: 'v0'
-        },
-        length: 2
-      }
-    ],
-    title = 'number of tabs should be {0}',
-    controller = this.subject();
-
-  cases.forEach(function (item) {
-
-    Em.run(function () {
-      controller.set('model', {
-        configs: item.configs
-      })
-    });
-
-    equal(controller.get('sliderAppTabs.length'), item.length, title.format(item.length));
-
-  });
-
-});
-
-test('weHaveQuicklinks', function () {
-
-  var cases = [
-      {
-        content: [
-          {
-            id: '0'
-          }
-        ],
-        value: true
-      },
-      {
-        value: false
-      }
-    ],
-    title = 'should be {0}',
-    controller = this.subject();
-
-  cases.forEach(function (item) {
-
-    Em.run(function () {
-      controller.set('model', {
-        quickLinks: {
-          content: {
-            content: item.content
-          }
-        }
-      });
-    });
-
-    equal(controller.get('weHaveQuicklinks'), item.value, title.format(item.value));
-
-  });
-
-});
-
-test('destroyButtonEnabled', function () {
-
-  var cases = [
-      {
-        confirmChecked: true,
-        string: 'disabled'
-      },
-      {
-        confirmChecked: false,
-        string: 'enabled'
-      }
-    ],
-    title = 'button is {0}',
-    controller = this.subject();
-
-  cases.forEach(function (item) {
-
-    Em.run(function () {
-      controller.set('confirmChecked', item.confirmChecked);
-    });
-
-    equal(controller.get('destroyButtonEnabled'), !item.confirmChecked, title.format(item.string));
-
-  });
-
-});
-
-test('confirmDestroy', function () {
-
-  var controller = this.subject(),
-    assertionsEqual = [
-      {
-        propertyName: 'name',
-        value: 'confirm-modal'
-      },
-      {
-        propertyName: 'title',
-        value: Ember.I18n.t('sliderApp.destroy.confirm.title')
-      },
-      {
-        propertyName: 'manual',
-        value: true
-      }
-    ],
-    assertionsDeepEqual = [
-      {
-        propertyName: 'targetObject',
-        value: controller,
-        valueFormatted: 'App.SliderAppController'
-      },
-      {
-        propertyName: 'controller',
-        value: controller,
-        valueFormatted: 'App.SliderAppController'
-      },
-      {
-        propertyName: 'body',
-        value: App.DestroyAppPopupView
-      },
-      {
-        propertyName: 'footerViews',
-        value: [App.DestroyAppPopupFooterView]
-      }
-    ],
-    title = 'modalComponent.{0} should be {1}';
-
-  Em.run(function () {
-    controller.confirmDestroy();
-  });
-
-  ok(Bootstrap.ModalManager.register.calledOnce, 'Bootstrap.ModalManager.register should be executed');
-  assertionsEqual.forEach(function (item) {
-    equal(Bootstrap.ModalManager.register.firstCall.args[1][item.propertyName], item.value, title.format(item.propertyName, item.value));
-  });
-  assertionsDeepEqual.forEach(function (item) {
-    deepEqual(Bootstrap.ModalManager.register.firstCall.args[1][item.propertyName], item.value, title.format(item.propertyName, item.valueFormatted || item.value));
-  });
-
-});
-
-test('tryDoAction', function () {
-
-  var controller = this.subject({
-    currentAction: 'customMethod',
-    customMethod: function () {
-      this.set('groupedComponents', [{}]);
-    }
-  });
-
-  Em.run(function () {
-    controller.tryDoAction();
-  });
-
-  deepEqual(controller.get('groupedComponents'), [{}], 'currentAction should be executed');
-
-});
-
-test('groupComponents', function () {
-
-  var controller = this.subject({
-    appType: {
-      components: [
-        Em.Object.create({
-          name: 'c0'
-        }),
-        Em.Object.create({
-          name: 'c1'
-        })
-      ]
-    },
-    components: [
-      Em.Object.create({
-        componentName: 'c0'
-      })
-    ]
-  });
-
-  Em.run(function () {
-    controller.groupComponents();
-  });
-
-  equal(controller.get('groupedComponents')[0].count, 1, 'count should be incremented');
-  equal(controller.get('groupedComponents')[1].count, 0, 'count shouldn\'t be incremented');
-
-});
-
-test('validateGroupedComponents', function () {
-
-  var cases = [
-      {
-        count: ' 1',
-        hasErrors: true,
-        title: 'validation failure'
-      },
-      {
-        count: '-1',
-        hasErrors: true,
-        title: 'validation failure'
-      },
-      {
-        count: 1,
-        hasErrors: false,
-        title: 'validation success'
-      }
-    ],
-    controller = this.subject();
-
-  cases.forEach(function (item) {
-
-    Em.run(function () {
-      controller.set('groupedComponents', [{
-        count: item.count
-      }]);
-      controller.validateGroupedComponents();
-    });
-
-    equal(controller.get('groupedComponentsHaveErrors'), item.hasErrors, item.title);
-
-  });
-
-});
-
-test('flex', function () {
-
-  var controller = this.subject({
-      appType: {
-        components: [
-          Em.Object.create({
-            name: 'c0'
-          }),
-          Em.Object.create({
-            name: 'c1'
-          })
-        ]
-      },
-      components: [
-        Em.Object.create({
-          componentName: 'c0'
-        })
-      ]
-    });
-
-  Em.run(function () {
-    controller.flex();
-  });
-
-  equal(controller.get('groupedComponents')[0].count, 1, 'count should be incremented');
-  equal(controller.get('groupedComponents')[1].count, 0, 'count shouldn\'t be incremented');
-
-});
-
-test('mapComponentsForFlexRequest', function () {
-
-  var controller = this.subject({
-    groupedComponents: [
-      {
-        name: 'c0',
-        count: 1
-      },
-      {
-        name: 'c1',
-        count: 0
-      }
-    ]
-  });
-
-  deepEqual(controller.mapComponentsForFlexRequest(), {
-    c0: {
-      instanceCount: 1
-    },
-    c1: {
-      instanceCount: 0
-    }
-  }, 'should map grouped components');
-
-});
-
-test('destroy', function () {
-
-  var controller = this.subject({
-    model: Em.Object.create({
-      isActionPerformed: false
-    })
-  });
-
-  Em.run(function () {
-    controller.destroy();
-  });
-
-  ok(controller.get('model.isActionPerformed'), 'model.isActionPerformed should be true');
-
-});
-
-test('actionErrorCallback', function () {
-
-  var controller = this.subject({
-    model: Em.Object.create({
-      isActionPerformed: true
-    }),
-    defaultErrorHandler: Em.K
-  });
-
-  Em.run(function () {
-    controller.actionErrorCallback(null, null, null, {
-      url: null,
-      type: null
-    });
-  });
-
-  ok(!controller.get('model.isActionPerformed'), 'model.isActionPerformed should be true');
-
-});
-
-test('actions.submitFlex', function () {
-
-  var controller = this.subject({
-      model: Em.Object.create({
-        id: 0,
-        name: 'n'
-      }),
-      validateGroupedComponents: function () {
-        return false;
-      },
-      groupedComponentsHaveErrors: true
-    });
-
-  Em.run(function () {
-    controller.send('submitFlex');
-  });
-
-  equal(controller.get('groupedComponents.length'), 0, 'should clear grouped components');
-  ok(!controller.get('groupedComponentsHaveErrors'), 'should clear components errors');
-
-});
-
-test('actions.closeFlex', function () {
-
-  var controller = this.subject({
-    groupedComponents: [{}],
-    groupedComponentsHaveErrors: true
-  });
-
-  Em.run(function () {
-    controller.send('closeFlex');
-  });
-
-  equal(controller.get('groupedComponents.length'), 0, 'should clear grouped components');
-  ok(!controller.get('groupedComponentsHaveErrors'), 'should clear components errors');
-
-});
-
-test('modalConfirmed', function () {
-
-  var controller = this.subject({
-      confirmChecked: true,
-      currentAction: 'customMethod',
-      customMethod: function () {
-        this.set('groupedComponents', [{}]);
-      }
-    });
-
-  Em.run(function () {
-    controller.send('modalConfirmed');
-  });
-
-  deepEqual(controller.get('groupedComponents'), [{}], 'currentAction should be executed');
-  ok(!controller.get('confirmChecked'), 'confirmChecked should be false');
-
-});
-
-test('modalCanceled', function () {
-
-  var controller = this.subject({
-      confirmChecked: true
-    });
-
-  Em.run(function () {
-    controller.send('modalCanceled');
-  });
-
-  ok(!controller.get('confirmChecked'), 'confirmChecked should be false');
-
-});
-
-test('openModal', function () {
-
-  var cases = [
-      {
-        options: {
-          action: 'customMethod'
-        },
-        groupedComponents: [{}],
-        title: 'should execute currentAction'
-      },
-      {
-        options: {
-          action: 'customMethod',
-          customConfirm: 'customConfirmMethod'
-        },
-        groupedComponents: [{}, {}],
-        title: 'should execute customConfirm'
-      }
-    ],
-    controller = this.subject({
-      customMethod: function () {
-        this.set('groupedComponents', [{}]);
-      },
-      customConfirmMethod: function () {
-        this.set('groupedComponents', [{}, {}]);
-      }
-    });
-
-  Em.run(function () {
-    controller.send('openModal', {
-      action: 'customMethod'
-    });
-  });
-
-  equal(controller.get('currentAction'), 'customMethod', 'should set currentAction');
-
-  cases.forEach(function (item) {
-
-    Em.run(function () {
-      controller.send('openModal', item.options);
-    });
-
-    deepEqual(controller.get('groupedComponents'), item.groupedComponents, item.title);
-
-  });
-
-});
-
-test('quickLinksOrdered', function() {
-  expect(2);
-
-  var controller = this.subject({
-    model: Em.Object.create({
-      'quickLinks': [
-        Em.Object.create({ label: 'org.apache.slider.thrift'}),
-        Em.Object.create({ label: 'Metrics API'}),
-        Em.Object.create({ label: 'org.apache.slider.hbase'}),
-        Em.Object.create({ label: 'Metrics UI'}),
-        Em.Object.create({ label: 'UI'}),
-        Em.Object.create({ label: 'Some Label'})
-      ]
-    }),
-    weHaveQuicklinks: true
-  });
-
-  Em.run(function() {
-    controller.get('quickLinksOrdered');
-  });
-
-  equal(controller.get('quickLinksOrdered').objectAt(4).get('label'), 'Metrics UI', 'Metrics UI link should be before Metrics API');
-  equal(controller.get('quickLinksOrdered').objectAt(5).get('label'), 'Metrics API', 'Metrics API link should be last');
-});
-
-
-test('Disable Action Button', function() {
-  expect(6);
-  var controller = this.subject({
-    model: Em.Object.extend({
-      isActionFinished: function() {
-        return this.get('status') != this.get('statusBeforeAction');
-      }.property('statusBeforeAction', 'status')
-    }).create({
-      id: 'someId',
-      name: 'SomeName',
-      status: 'ACCEPTED',
-      statusBeforeAction: ''
-    }),
-    defaultErrorHandler: function() { return true; }
-  });
-
-  Em.run(function() {
-    controller.thaw();
-  });
-
-  equal(controller.get('model').get('isActionPerformed'), true, 'Perform start action');
-
-  Em.run(function() {
-    controller.set('model.status', 'RUNNING');
-    controller.get('availableActions');
-  });
-
-  equal(controller.get('model').get('isActionPerformed'), false, 'Start is done.');
-
-  Em.run(function() {
-    controller.freeze();
-  });
-
-  equal(controller.get('model').get('isActionPerformed'), true, 'Perform freeze action')
-
-  Em.run(function() {
-    controller.set('model.status', 'FROZEN');
-    controller.get('availableActions');
-  });
-
-  equal(controller.get('model').get('isActionPerformed'), false, 'Freeze is done.');
-
-  Em.run(function() {
-    controller.thaw();
-  });
-
-  equal(controller.get('model').get('isActionPerformed'), true, 'Start action performed expect for error.');
-
-  Em.run(function() {
-    controller.actionErrorCallback({requestText: 'some text'}, {url: '/some/url'}, {type: 'PUT'}, true);
-  });
-
-  equal(controller.get('model').get('isActionPerformed'), false, 'Error catched button should be enabled');
-});


[11/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/development/ember.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/development/ember.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/development/ember.js
deleted file mode 100644
index beaa452..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/development/ember.js
+++ /dev/null
@@ -1,43235 +0,0 @@
-/*!
- * @overview  Ember - JavaScript Application Framework
- * @copyright Copyright 2011-2014 Tilde Inc. and contributors
- *            Portions Copyright 2006-2011 Strobe Inc.
- *            Portions Copyright 2008-2011 Apple Inc. All rights reserved.
- * @license   Licensed under MIT license
- *            See https://raw.github.com/emberjs/ember.js/master/LICENSE
- * @version   1.5.1+pre.ff8c6bbb
- */
-
-
-(function() {
-/*global __fail__*/
-
-/**
-Ember Debug
-
-@module ember
-@submodule ember-debug
-*/
-
-/**
-@class Ember
-*/
-
-if ('undefined' === typeof Ember) {
-  Ember = {};
-
-  if ('undefined' !== typeof window) {
-    window.Em = window.Ember = Em = Ember;
-  }
-}
-
-// This needs to be kept in sync with the logic in
-// `packages/ember-metal/lib/core.js`.
-//
-// This is duplicated here to ensure that `Ember.ENV`
-// is setup even if `Ember` is not loaded yet.
-if (Ember.ENV) {
-  // do nothing if Ember.ENV is already setup
-} else if ('undefined' !== typeof EmberENV) {
-  Ember.ENV = EmberENV;
-} else if('undefined' !== typeof ENV) {
-  Ember.ENV = ENV;
-} else {
-  Ember.ENV = {};
-}
-
-if (!('MANDATORY_SETTER' in Ember.ENV)) {
-  Ember.ENV.MANDATORY_SETTER = true; // default to true for debug dist
-}
-
-/**
-  Define an assertion that will throw an exception if the condition is not
-  met. Ember build tools will remove any calls to `Ember.assert()` when
-  doing a production build. Example:
-
-  ```javascript
-  // Test for truthiness
-  Ember.assert('Must pass a valid object', obj);
-  // Fail unconditionally
-  Ember.assert('This code path should never be run')
-  ```
-
-  @method assert
-  @param {String} desc A description of the assertion. This will become
-    the text of the Error thrown if the assertion fails.
-  @param {Boolean} test Must be truthy for the assertion to pass. If
-    falsy, an exception will be thrown.
-*/
-Ember.assert = function(desc, test) {
-  if (!test) {
-    throw new Ember.Error("Assertion Failed: " + desc);
-  }
-};
-
-
-/**
-  Display a warning with the provided message. Ember build tools will
-  remove any calls to `Ember.warn()` when doing a production build.
-
-  @method warn
-  @param {String} message A warning to display.
-  @param {Boolean} test An optional boolean. If falsy, the warning
-    will be displayed.
-*/
-Ember.warn = function(message, test) {
-  if (!test) {
-    Ember.Logger.warn("WARNING: "+message);
-    if ('trace' in Ember.Logger) Ember.Logger.trace();
-  }
-};
-
-/**
-  Display a debug notice. Ember build tools will remove any calls to
-  `Ember.debug()` when doing a production build.
-
-  ```javascript
-  Ember.debug("I'm a debug notice!");
-  ```
-
-  @method debug
-  @param {String} message A debug message to display.
-*/
-Ember.debug = function(message) {
-  Ember.Logger.debug("DEBUG: "+message);
-};
-
-/**
-  Display a deprecation warning with the provided message and a stack trace
-  (Chrome and Firefox only). Ember build tools will remove any calls to
-  `Ember.deprecate()` when doing a production build.
-
-  @method deprecate
-  @param {String} message A description of the deprecation.
-  @param {Boolean} test An optional boolean. If falsy, the deprecation
-    will be displayed.
-*/
-Ember.deprecate = function(message, test) {
-  if (test) { return; }
-
-  if (Ember.ENV.RAISE_ON_DEPRECATION) { throw new Ember.Error(message); }
-
-  var error;
-
-  // When using new Error, we can't do the arguments check for Chrome. Alternatives are welcome
-  try { __fail__.fail(); } catch (e) { error = e; }
-
-  if (Ember.LOG_STACKTRACE_ON_DEPRECATION && error.stack) {
-    var stack, stackStr = '';
-    if (error['arguments']) {
-      // Chrome
-      stack = error.stack.replace(/^\s+at\s+/gm, '').
-                          replace(/^([^\(]+?)([\n$])/gm, '{anonymous}($1)$2').
-                          replace(/^Object.<anonymous>\s*\(([^\)]+)\)/gm, '{anonymous}($1)').split('\n');
-      stack.shift();
-    } else {
-      // Firefox
-      stack = error.stack.replace(/(?:\n@:0)?\s+$/m, '').
-                          replace(/^\(/gm, '{anonymous}(').split('\n');
-    }
-
-    stackStr = "\n    " + stack.slice(2).join("\n    ");
-    message = message + stackStr;
-  }
-
-  Ember.Logger.warn("DEPRECATION: "+message);
-};
-
-
-
-/**
-  Alias an old, deprecated method with its new counterpart.
-
-  Display a deprecation warning with the provided message and a stack trace
-  (Chrome and Firefox only) when the assigned method is called.
-
-  Ember build tools will not remove calls to `Ember.deprecateFunc()`, though
-  no warnings will be shown in production.
-
-  ```javascript
-  Ember.oldMethod = Ember.deprecateFunc("Please use the new, updated method", Ember.newMethod);
-  ```
-
-  @method deprecateFunc
-  @param {String} message A description of the deprecation.
-  @param {Function} func The new function called to replace its deprecated counterpart.
-  @return {Function} a new function that wrapped the original function with a deprecation warning
-*/
-Ember.deprecateFunc = function(message, func) {
-  return function() {
-    Ember.deprecate(message);
-    return func.apply(this, arguments);
-  };
-};
-
-
-/**
-  Run a function meant for debugging. Ember build tools will remove any calls to
-  `Ember.runInDebug()` when doing a production build.
-
-  ```javascript
-  Ember.runInDebug( function() {
-    Ember.Handlebars.EachView.reopen({
-      didInsertElement: function() {
-        console.log("I'm happy");
-      }
-    });
-  });
-  ```
-
-  @method runInDebug
-  @param {Function} func The function to be executed.
-*/
-Ember.runInDebug = function(func) {
-  func()
-};
-
-// Inform the developer about the Ember Inspector if not installed.
-if (!Ember.testing) {
-  var isFirefox = typeof InstallTrigger !== 'undefined';
-  var isChrome = !!window.chrome && !window.opera;
-
-  if (typeof window !== 'undefined' && (isFirefox || isChrome) && window.addEventListener) {
-    window.addEventListener("load", function() {
-      if (document.documentElement && document.documentElement.dataset && !document.documentElement.dataset.emberExtension) {
-        var downloadURL;
-
-        if(isChrome) {
-          downloadURL = 'https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi';
-        } else if(isFirefox) {
-          downloadURL = 'https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/';
-        }
-
-        Ember.debug('For more advanced debugging, install the Ember Inspector from ' + downloadURL);
-      }
-    }, false);
-  }
-}
-
-})();
-
-/*!
- * @overview  Ember - JavaScript Application Framework
- * @copyright Copyright 2011-2014 Tilde Inc. and contributors
- *            Portions Copyright 2006-2011 Strobe Inc.
- *            Portions Copyright 2008-2011 Apple Inc. All rights reserved.
- * @license   Licensed under MIT license
- *            See https://raw.github.com/emberjs/ember.js/master/LICENSE
- * @version   1.5.1+pre.ff8c6bbb
- */
-
-
-(function() {
-var define, requireModule, require, requirejs;
-
-(function() {
-  var registry = {}, seen = {};
-
-  define = function(name, deps, callback) {
-    registry[name] = { deps: deps, callback: callback };
-  };
-
-  requirejs = require = requireModule = function(name) {
-  requirejs._eak_seen = registry;
-
-    if (seen[name]) { return seen[name]; }
-    seen[name] = {};
-
-    if (!registry[name]) {
-      throw new Error("Could not find module " + name);
-    }
-
-    var mod = registry[name],
-        deps = mod.deps,
-        callback = mod.callback,
-        reified = [],
-        exports;
-
-    for (var i=0, l=deps.length; i<l; i++) {
-      if (deps[i] === 'exports') {
-        reified.push(exports = {});
-      } else {
-        reified.push(requireModule(resolve(deps[i])));
-      }
-    }
-
-    var value = callback.apply(this, reified);
-    return seen[name] = exports || value;
-
-    function resolve(child) {
-      if (child.charAt(0) !== '.') { return child; }
-      var parts = child.split("/");
-      var parentBase = name.split("/").slice(0, -1);
-
-      for (var i=0, l=parts.length; i<l; i++) {
-        var part = parts[i];
-
-        if (part === '..') { parentBase.pop(); }
-        else if (part === '.') { continue; }
-        else { parentBase.push(part); }
-      }
-
-      return parentBase.join("/");
-    }
-  };
-})();
-(function() {
-/*globals Em:true ENV EmberENV MetamorphENV:true */
-
-/**
-@module ember
-@submodule ember-metal
-*/
-
-/**
-  All Ember methods and functions are defined inside of this namespace. You
-  generally should not add new properties to this namespace as it may be
-  overwritten by future versions of Ember.
-
-  You can also use the shorthand `Em` instead of `Ember`.
-
-  Ember-Runtime is a framework that provides core functions for Ember including
-  cross-platform functions, support for property observing and objects. Its
-  focus is on small size and performance. You can use this in place of or
-  along-side other cross-platform libraries such as jQuery.
-
-  The core Runtime framework is based on the jQuery API with a number of
-  performance optimizations.
-
-  @class Ember
-  @static
-  @version 1.5.1+pre.ff8c6bbb
-*/
-
-if ('undefined' === typeof Ember) {
-  // Create core object. Make it act like an instance of Ember.Namespace so that
-  // objects assigned to it are given a sane string representation.
-  Ember = {};
-}
-
-// Default imports, exports and lookup to the global object;
-var imports = Ember.imports = Ember.imports || this;
-var exports = Ember.exports = Ember.exports || this;
-var lookup  = Ember.lookup  = Ember.lookup  || this;
-
-// aliases needed to keep minifiers from removing the global context
-exports.Em = exports.Ember = Em = Ember;
-
-// Make sure these are set whether Ember was already defined or not
-
-Ember.isNamespace = true;
-
-Ember.toString = function() { return "Ember"; };
-
-
-/**
-  @property VERSION
-  @type String
-  @default '1.5.1+pre.ff8c6bbb'
-  @static
-*/
-Ember.VERSION = '1.5.1+pre.ff8c6bbb';
-
-/**
-  Standard environmental variables. You can define these in a global `EmberENV`
-  variable before loading Ember to control various configuration settings.
-
-  For backwards compatibility with earlier versions of Ember the global `ENV`
-  variable will be used if `EmberENV` is not defined.
-
-  @property ENV
-  @type Hash
-*/
-
-// This needs to be kept in sync with the logic in
-// `packages/ember-debug/lib/main.js`.
-if (Ember.ENV) {
-  // do nothing if Ember.ENV is already setup
-} else if ('undefined' !== typeof EmberENV) {
-  Ember.ENV = EmberENV;
-} else if('undefined' !== typeof ENV) {
-  Ember.ENV = ENV;
-} else {
-  Ember.ENV = {};
-}
-
-Ember.config = Ember.config || {};
-
-// We disable the RANGE API by default for performance reasons
-if ('undefined' === typeof Ember.ENV.DISABLE_RANGE_API) {
-  Ember.ENV.DISABLE_RANGE_API = true;
-}
-
-if ("undefined" === typeof MetamorphENV) {
-  exports.MetamorphENV = {};
-}
-
-MetamorphENV.DISABLE_RANGE_API = Ember.ENV.DISABLE_RANGE_API;
-
-/**
-  Hash of enabled Canary features. Add to before creating your application.
-
-  You can also define `ENV.FEATURES` if you need to enable features flagged at runtime.
-
-  @property FEATURES
-  @type Hash
-*/
-
-Ember.FEATURES = Ember.ENV.FEATURES || {};
-
-/**
-  Test that a feature is enabled. Parsed by Ember's build tools to leave
-  experimental features out of beta/stable builds.
-
-  You can define the following configuration options:
-
-  * `ENV.ENABLE_ALL_FEATURES` - force all features to be enabled.
-  * `ENV.ENABLE_OPTIONAL_FEATURES` - enable any features that have not been explicitly
-    enabled/disabled.
-
-  @method isEnabled
-  @param {string} feature
-*/
-
-Ember.FEATURES.isEnabled = function(feature) {
-  var featureValue = Ember.FEATURES[feature];
-
-  if (Ember.ENV.ENABLE_ALL_FEATURES) {
-    return true;
-  } else if (featureValue === true || featureValue === false || featureValue === undefined) {
-    return featureValue;
-  } else if (Ember.ENV.ENABLE_OPTIONAL_FEATURES) {
-    return true;
-  } else {
-    return false;
-  }
-};
-
-// ..........................................................
-// BOOTSTRAP
-//
-
-/**
-  Determines whether Ember should enhances some built-in object prototypes to
-  provide a more friendly API. If enabled, a few methods will be added to
-  `Function`, `String`, and `Array`. `Object.prototype` will not be enhanced,
-  which is the one that causes most trouble for people.
-
-  In general we recommend leaving this option set to true since it rarely
-  conflicts with other code. If you need to turn it off however, you can
-  define an `ENV.EXTEND_PROTOTYPES` config to disable it.
-
-  @property EXTEND_PROTOTYPES
-  @type Boolean
-  @default true
-*/
-Ember.EXTEND_PROTOTYPES = Ember.ENV.EXTEND_PROTOTYPES;
-
-if (typeof Ember.EXTEND_PROTOTYPES === 'undefined') {
-  Ember.EXTEND_PROTOTYPES = true;
-}
-
-/**
-  Determines whether Ember logs a full stack trace during deprecation warnings
-
-  @property LOG_STACKTRACE_ON_DEPRECATION
-  @type Boolean
-  @default true
-*/
-Ember.LOG_STACKTRACE_ON_DEPRECATION = (Ember.ENV.LOG_STACKTRACE_ON_DEPRECATION !== false);
-
-/**
-  Determines whether Ember should add ECMAScript 5 shims to older browsers.
-
-  @property SHIM_ES5
-  @type Boolean
-  @default Ember.EXTEND_PROTOTYPES
-*/
-Ember.SHIM_ES5 = (Ember.ENV.SHIM_ES5 === false) ? false : Ember.EXTEND_PROTOTYPES;
-
-/**
-  Determines whether Ember logs info about version of used libraries
-
-  @property LOG_VERSION
-  @type Boolean
-  @default true
-*/
-Ember.LOG_VERSION = (Ember.ENV.LOG_VERSION === false) ? false : true;
-
-/**
-  Empty function. Useful for some operations. Always returns `this`.
-
-  @method K
-  @private
-  @return {Object}
-*/
-Ember.K = function() { return this; };
-
-
-// Stub out the methods defined by the ember-debug package in case it's not loaded
-
-if ('undefined' === typeof Ember.assert) { Ember.assert = Ember.K; }
-if ('undefined' === typeof Ember.warn) { Ember.warn = Ember.K; }
-if ('undefined' === typeof Ember.debug) { Ember.debug = Ember.K; }
-if ('undefined' === typeof Ember.runInDebug) { Ember.runInDebug = Ember.K; }
-if ('undefined' === typeof Ember.deprecate) { Ember.deprecate = Ember.K; }
-if ('undefined' === typeof Ember.deprecateFunc) {
-  Ember.deprecateFunc = function(_, func) { return func; };
-}
-
-/**
-  Previously we used `Ember.$.uuid`, however `$.uuid` has been removed from
-  jQuery master. We'll just bootstrap our own uuid now.
-
-  @property uuid
-  @type Number
-  @private
-*/
-Ember.uuid = 0;
-
-/**
-  Merge the contents of two objects together into the first object.
-
-  ```javascript
-  Ember.merge({first: 'Tom'}, {last: 'Dale'}); // {first: 'Tom', last: 'Dale'}
-  var a = {first: 'Yehuda'}, b = {last: 'Katz'};
-  Ember.merge(a, b); // a == {first: 'Yehuda', last: 'Katz'}, b == {last: 'Katz'}
-  ```
-
-  @method merge
-  @for Ember
-  @param {Object} original The object to merge into
-  @param {Object} updates The object to copy properties from
-  @return {Object}
-*/
-Ember.merge = function(original, updates) {
-  for (var prop in updates) {
-    if (!updates.hasOwnProperty(prop)) { continue; }
-    original[prop] = updates[prop];
-  }
-  return original;
-};
-
-/**
-  Returns true if the passed value is null or undefined. This avoids errors
-  from JSLint complaining about use of ==, which can be technically
-  confusing.
-
-  ```javascript
-  Ember.isNone();              // true
-  Ember.isNone(null);          // true
-  Ember.isNone(undefined);     // true
-  Ember.isNone('');            // false
-  Ember.isNone([]);            // false
-  Ember.isNone(function() {});  // false
-  ```
-
-  @method isNone
-  @for Ember
-  @param {Object} obj Value to test
-  @return {Boolean}
-*/
-Ember.isNone = function(obj) {
-  return obj === null || obj === undefined;
-};
-Ember.none = Ember.deprecateFunc("Ember.none is deprecated. Please use Ember.isNone instead.", Ember.isNone);
-
-/**
-  Verifies that a value is `null` or an empty string, empty array,
-  or empty function.
-
-  Constrains the rules on `Ember.isNone` by returning false for empty
-  string and empty arrays.
-
-  ```javascript
-  Ember.isEmpty();                // true
-  Ember.isEmpty(null);            // true
-  Ember.isEmpty(undefined);       // true
-  Ember.isEmpty('');              // true
-  Ember.isEmpty([]);              // true
-  Ember.isEmpty('Adam Hawkins');  // false
-  Ember.isEmpty([0,1,2]);         // false
-  ```
-
-  @method isEmpty
-  @for Ember
-  @param {Object} obj Value to test
-  @return {Boolean}
-*/
-Ember.isEmpty = function(obj) {
-  return Ember.isNone(obj) || (obj.length === 0 && typeof obj !== 'function') || (typeof obj === 'object' && Ember.get(obj, 'length') === 0);
-};
-Ember.empty = Ember.deprecateFunc("Ember.empty is deprecated. Please use Ember.isEmpty instead.", Ember.isEmpty);
-
-
-  /**
-    A value is blank if it is empty or a whitespace string.
-
-    ```javascript
-    Ember.isBlank();                // true
-    Ember.isBlank(null);            // true
-    Ember.isBlank(undefined);       // true
-    Ember.isBlank('');              // true
-    Ember.isBlank([]);              // true
-    Ember.isBlank('\n\t');          // true
-    Ember.isBlank('  ');            // true
-    Ember.isBlank({});              // false
-    Ember.isBlank('\n\t Hello');    // false
-    Ember.isBlank('Hello world');   // false
-    Ember.isBlank([1,2,3]);         // false
-    ```
-
-    @method isBlank
-    @for Ember
-    @param {Object} obj Value to test
-    @return {Boolean}
-  */
-  Ember.isBlank = function(obj) {
-    return Ember.isEmpty(obj) || (typeof obj === 'string' && obj.match(/\S/) === null);
-  };
-
-
-})();
-
-
-
-(function() {
-/*globals Node */
-/**
-@module ember-metal
-*/
-
-/**
-  Platform specific methods and feature detectors needed by the framework.
-
-  @class platform
-  @namespace Ember
-  @static
-*/
-var platform = Ember.platform = {};
-
-
-/**
-  Identical to `Object.create()`. Implements if not available natively.
-
-  @method create
-  @for Ember
-*/
-Ember.create = Object.create;
-
-// IE8 has Object.create but it couldn't treat property descriptors.
-if (Ember.create) {
-  if (Ember.create({a: 1}, {a: {value: 2}}).a !== 2) {
-    Ember.create = null;
-  }
-}
-
-// STUB_OBJECT_CREATE allows us to override other libraries that stub
-// Object.create different than we would prefer
-if (!Ember.create || Ember.ENV.STUB_OBJECT_CREATE) {
-  var K = function() {};
-
-  Ember.create = function(obj, props) {
-    K.prototype = obj;
-    obj = new K();
-    if (props) {
-      K.prototype = obj;
-      for (var prop in props) {
-        K.prototype[prop] = props[prop].value;
-      }
-      obj = new K();
-    }
-    K.prototype = null;
-
-    return obj;
-  };
-
-  Ember.create.isSimulated = true;
-}
-
-var defineProperty = Object.defineProperty;
-var canRedefineProperties, canDefinePropertyOnDOM;
-
-// Catch IE8 where Object.defineProperty exists but only works on DOM elements
-if (defineProperty) {
-  try {
-    defineProperty({}, 'a',{get:function() {}});
-  } catch (e) {
-    defineProperty = null;
-  }
-}
-
-if (defineProperty) {
-  // Detects a bug in Android <3.2 where you cannot redefine a property using
-  // Object.defineProperty once accessors have already been set.
-  canRedefineProperties = (function() {
-    var obj = {};
-
-    defineProperty(obj, 'a', {
-      configurable: true,
-      enumerable: true,
-      get: function() { },
-      set: function() { }
-    });
-
-    defineProperty(obj, 'a', {
-      configurable: true,
-      enumerable: true,
-      writable: true,
-      value: true
-    });
-
-    return obj.a === true;
-  })();
-
-  // This is for Safari 5.0, which supports Object.defineProperty, but not
-  // on DOM nodes.
-  canDefinePropertyOnDOM = (function() {
-    try {
-      defineProperty(document.createElement('div'), 'definePropertyOnDOM', {});
-      return true;
-    } catch(e) { }
-
-    return false;
-  })();
-
-  if (!canRedefineProperties) {
-    defineProperty = null;
-  } else if (!canDefinePropertyOnDOM) {
-    defineProperty = function(obj, keyName, desc) {
-      var isNode;
-
-      if (typeof Node === "object") {
-        isNode = obj instanceof Node;
-      } else {
-        isNode = typeof obj === "object" && typeof obj.nodeType === "number" && typeof obj.nodeName === "string";
-      }
-
-      if (isNode) {
-        // TODO: Should we have a warning here?
-        return (obj[keyName] = desc.value);
-      } else {
-        return Object.defineProperty(obj, keyName, desc);
-      }
-    };
-  }
-}
-
-/**
-@class platform
-@namespace Ember
-*/
-
-/**
-  Identical to `Object.defineProperty()`. Implements as much functionality
-  as possible if not available natively.
-
-  @method defineProperty
-  @param {Object} obj The object to modify
-  @param {String} keyName property name to modify
-  @param {Object} desc descriptor hash
-  @return {void}
-*/
-platform.defineProperty = defineProperty;
-
-/**
-  Set to true if the platform supports native getters and setters.
-
-  @property hasPropertyAccessors
-  @final
-*/
-platform.hasPropertyAccessors = true;
-
-if (!platform.defineProperty) {
-  platform.hasPropertyAccessors = false;
-
-  platform.defineProperty = function(obj, keyName, desc) {
-    if (!desc.get) { obj[keyName] = desc.value; }
-  };
-
-  platform.defineProperty.isSimulated = true;
-}
-
-if (Ember.ENV.MANDATORY_SETTER && !platform.hasPropertyAccessors) {
-  Ember.ENV.MANDATORY_SETTER = false;
-}
-
-})();
-
-
-
-(function() {
-/*jshint newcap:false*/
-/**
-@module ember-metal
-*/
-
-// NOTE: There is a bug in jshint that doesn't recognize `Object()` without `new`
-// as being ok unless both `newcap:false` and not `use strict`.
-// https://github.com/jshint/jshint/issues/392
-
-// Testing this is not ideal, but we want to use native functions
-// if available, but not to use versions created by libraries like Prototype
-var isNativeFunc = function(func) {
-  // This should probably work in all browsers likely to have ES5 array methods
-  return func && Function.prototype.toString.call(func).indexOf('[native code]') > -1;
-};
-
-// From: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/map
-var arrayMap = isNativeFunc(Array.prototype.map) ? Array.prototype.map : function(fun /*, thisp */) {
-  //"use strict";
-
-  if (this === void 0 || this === null) {
-    throw new TypeError();
-  }
-
-  var t = Object(this);
-  var len = t.length >>> 0;
-  if (typeof fun !== "function") {
-    throw new TypeError();
-  }
-
-  var res = new Array(len);
-  var thisp = arguments[1];
-  for (var i = 0; i < len; i++) {
-    if (i in t) {
-      res[i] = fun.call(thisp, t[i], i, t);
-    }
-  }
-
-  return res;
-};
-
-// From: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/foreach
-var arrayForEach = isNativeFunc(Array.prototype.forEach) ? Array.prototype.forEach : function(fun /*, thisp */) {
-  //"use strict";
-
-  if (this === void 0 || this === null) {
-    throw new TypeError();
-  }
-
-  var t = Object(this);
-  var len = t.length >>> 0;
-  if (typeof fun !== "function") {
-    throw new TypeError();
-  }
-
-  var thisp = arguments[1];
-  for (var i = 0; i < len; i++) {
-    if (i in t) {
-      fun.call(thisp, t[i], i, t);
-    }
-  }
-};
-
-var arrayIndexOf = isNativeFunc(Array.prototype.indexOf) ? Array.prototype.indexOf : function (obj, fromIndex) {
-  if (fromIndex === null || fromIndex === undefined) { fromIndex = 0; }
-  else if (fromIndex < 0) { fromIndex = Math.max(0, this.length + fromIndex); }
-  for (var i = fromIndex, j = this.length; i < j; i++) {
-    if (this[i] === obj) { return i; }
-  }
-  return -1;
-};
-
-var arrayFilter = isNativeFunc(Array.prototype.filter) ? Array.prototype.filter : function (fn, context) {
-  var i,
-  value,
-  result = [],
-  length = this.length;
-
-  for (i = 0; i < length; i++) {
-    if (this.hasOwnProperty(i)) {
-      value = this[i];
-      if (fn.call(context, value, i, this)) {
-        result.push(value);
-      }
-    }
-  }
-  return result;
-};
-
-/**
-  Array polyfills to support ES5 features in older browsers.
-
-  @namespace Ember
-  @property ArrayPolyfills
-*/
-Ember.ArrayPolyfills = {
-  map: arrayMap,
-  forEach: arrayForEach,
-  filter: arrayFilter,
-  indexOf: arrayIndexOf
-};
-
-if (Ember.SHIM_ES5) {
-  if (!Array.prototype.map) {
-    Array.prototype.map = arrayMap;
-  }
-
-  if (!Array.prototype.forEach) {
-    Array.prototype.forEach = arrayForEach;
-  }
-
-  if (!Array.prototype.filter) {
-    Array.prototype.filter = arrayFilter;
-  }
-
-  if (!Array.prototype.indexOf) {
-    Array.prototype.indexOf = arrayIndexOf;
-  }
-}
-
-})();
-
-
-
-(function() {
-var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];
-
-/**
-  A subclass of the JavaScript Error object for use in Ember.
-
-  @class Error
-  @namespace Ember
-  @extends Error
-  @constructor
-*/
-Ember.Error = function() {
-  var tmp = Error.apply(this, arguments);
-
-  // Adds a `stack` property to the given error object that will yield the
-  // stack trace at the time captureStackTrace was called.
-  // When collecting the stack trace all frames above the topmost call
-  // to this function, including that call, will be left out of the
-  // stack trace.
-  // This is useful because we can hide Ember implementation details
-  // that are not very helpful for the user.
-  if (Error.captureStackTrace) {
-    Error.captureStackTrace(this, Ember.Error);
-  }
-  // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
-  for (var idx = 0; idx < errorProps.length; idx++) {
-    this[errorProps[idx]] = tmp[errorProps[idx]];
-  }
-};
-
-Ember.Error.prototype = Ember.create(Error.prototype);
-
-// ..........................................................
-// ERROR HANDLING
-//
-
-/**
-  A function may be assigned to `Ember.onerror` to be called when Ember
-  internals encounter an error. This is useful for specialized error handling
-  and reporting code.
-
-  ```javascript
-  Ember.onerror = function(error) {
-    Em.$.ajax('/report-error', 'POST', {
-      stack: error.stack,
-      otherInformation: 'whatever app state you want to provide'
-    });
-  };
-  ```
-
-  @event onerror
-  @for Ember
-  @param {Exception} error the error object
-*/
-Ember.onerror = null;
-
-})();
-
-
-
-(function() {
-/**
-@module ember-metal
-*/
-
-/**
-  Prefix used for guids through out Ember.
-  @private
-*/
-Ember.GUID_PREFIX = 'ember';
-
-
-var o_defineProperty = Ember.platform.defineProperty,
-    o_create = Ember.create,
-    // Used for guid generation...
-    GUID_KEY = '__ember'+ (+ new Date()),
-    numberCache  = [],
-    stringCache  = {},
-    uuid = 0;
-
-var MANDATORY_SETTER = Ember.ENV.MANDATORY_SETTER;
-
-/**
-  A unique key used to assign guids and other private metadata to objects.
-  If you inspect an object in your browser debugger you will often see these.
-  They can be safely ignored.
-
-  On browsers that support it, these properties are added with enumeration
-  disabled so they won't show up when you iterate over your properties.
-
-  @private
-  @property GUID_KEY
-  @for Ember
-  @type String
-  @final
-*/
-Ember.GUID_KEY = GUID_KEY;
-
-var GUID_DESC = {
-  writable:    false,
-  configurable: false,
-  enumerable:  false,
-  value: null
-};
-
-/**
-  Generates a new guid, optionally saving the guid to the object that you
-  pass in. You will rarely need to use this method. Instead you should
-  call `Ember.guidFor(obj)`, which return an existing guid if available.
-
-  @private
-  @method generateGuid
-  @for Ember
-  @param {Object} [obj] Object the guid will be used for. If passed in, the guid will
-    be saved on the object and reused whenever you pass the same object
-    again.
-
-    If no object is passed, just generate a new guid.
-  @param {String} [prefix] Prefix to place in front of the guid. Useful when you want to
-    separate the guid into separate namespaces.
-  @return {String} the guid
-*/
-Ember.generateGuid = function generateGuid(obj, prefix) {
-  if (!prefix) prefix = Ember.GUID_PREFIX;
-  var ret = (prefix + (uuid++));
-  if (obj) {
-    if (obj[GUID_KEY] === null) {
-      obj[GUID_KEY] = ret;
-    } else {
-      GUID_DESC.value = ret;
-      o_defineProperty(obj, GUID_KEY, GUID_DESC);
-    }
-  }
-  return ret;
-};
-
-/**
-  Returns a unique id for the object. If the object does not yet have a guid,
-  one will be assigned to it. You can call this on any object,
-  `Ember.Object`-based or not, but be aware that it will add a `_guid`
-  property.
-
-  You can also use this method on DOM Element objects.
-
-  @private
-  @method guidFor
-  @for Ember
-  @param {Object} obj any object, string, number, Element, or primitive
-  @return {String} the unique guid for this instance.
-*/
-Ember.guidFor = function guidFor(obj) {
-
-  // special cases where we don't want to add a key to object
-  if (obj === undefined) return "(undefined)";
-  if (obj === null) return "(null)";
-
-  var ret;
-  var type = typeof obj;
-
-  // Don't allow prototype changes to String etc. to change the guidFor
-  switch(type) {
-    case 'number':
-      ret = numberCache[obj];
-      if (!ret) ret = numberCache[obj] = 'nu'+obj;
-      return ret;
-
-    case 'string':
-      ret = stringCache[obj];
-      if (!ret) ret = stringCache[obj] = 'st'+(uuid++);
-      return ret;
-
-    case 'boolean':
-      return obj ? '(true)' : '(false)';
-
-    default:
-      if (obj[GUID_KEY]) return obj[GUID_KEY];
-      if (obj === Object) return '(Object)';
-      if (obj === Array)  return '(Array)';
-      ret = 'ember' + (uuid++);
-
-      if (obj[GUID_KEY] === null) {
-        obj[GUID_KEY] = ret;
-      } else {
-        GUID_DESC.value = ret;
-        o_defineProperty(obj, GUID_KEY, GUID_DESC);
-      }
-      return ret;
-  }
-};
-
-// ..........................................................
-// META
-//
-
-var META_DESC = Ember.META_DESC = {
-  writable:    true,
-  configurable: false,
-  enumerable:  false,
-  value: null
-};
-
-var META_KEY = Ember.GUID_KEY+'_meta';
-
-/**
-  The key used to store meta information on object for property observing.
-
-  @property META_KEY
-  @for Ember
-  @private
-  @final
-  @type String
-*/
-Ember.META_KEY = META_KEY;
-
-var isDefinePropertySimulated = Ember.platform.defineProperty.isSimulated;
-
-function Meta(obj) {
-  this.descs = {};
-  this.watching = {};
-  this.cache = {};
-  this.cacheMeta = {};
-  this.source = obj;
-}
-
-Meta.prototype = {
-  descs: null,
-  deps: null,
-  watching: null,
-  listeners: null,
-  cache: null,
-  cacheMeta: null,
-  source: null,
-  mixins: null,
-  bindings: null,
-  chains: null,
-  chainWatchers: null,
-  values: null,
-  proto: null
-};
-
-if (isDefinePropertySimulated) {
-  // on platforms that don't support enumerable false
-  // make meta fail jQuery.isPlainObject() to hide from
-  // jQuery.extend() by having a property that fails
-  // hasOwnProperty check.
-  Meta.prototype.__preventPlainObject__ = true;
-
-  // Without non-enumerable properties, meta objects will be output in JSON
-  // unless explicitly suppressed
-  Meta.prototype.toJSON = function () { };
-}
-
-// Placeholder for non-writable metas.
-var EMPTY_META = new Meta(null);
-
-if (MANDATORY_SETTER) { EMPTY_META.values = {}; }
-
-Ember.EMPTY_META = EMPTY_META;
-
-/**
-  Retrieves the meta hash for an object. If `writable` is true ensures the
-  hash is writable for this object as well.
-
-  The meta object contains information about computed property descriptors as
-  well as any watched properties and other information. You generally will
-  not access this information directly but instead work with higher level
-  methods that manipulate this hash indirectly.
-
-  @method meta
-  @for Ember
-  @private
-
-  @param {Object} obj The object to retrieve meta for
-  @param {Boolean} [writable=true] Pass `false` if you do not intend to modify
-    the meta hash, allowing the method to avoid making an unnecessary copy.
-  @return {Object} the meta hash for an object
-*/
-Ember.meta = function meta(obj, writable) {
-
-  var ret = obj[META_KEY];
-  if (writable===false) return ret || EMPTY_META;
-
-  if (!ret) {
-    if (!isDefinePropertySimulated) o_defineProperty(obj, META_KEY, META_DESC);
-
-    ret = new Meta(obj);
-
-    if (MANDATORY_SETTER) { ret.values = {}; }
-
-    obj[META_KEY] = ret;
-
-    // make sure we don't accidentally try to create constructor like desc
-    ret.descs.constructor = null;
-
-  } else if (ret.source !== obj) {
-    if (!isDefinePropertySimulated) o_defineProperty(obj, META_KEY, META_DESC);
-
-    ret = o_create(ret);
-    ret.descs     = o_create(ret.descs);
-    ret.watching  = o_create(ret.watching);
-    ret.cache     = {};
-    ret.cacheMeta = {};
-    ret.source    = obj;
-
-    if (MANDATORY_SETTER) { ret.values = o_create(ret.values); }
-
-    obj[META_KEY] = ret;
-  }
-  return ret;
-};
-
-Ember.getMeta = function getMeta(obj, property) {
-  var meta = Ember.meta(obj, false);
-  return meta[property];
-};
-
-Ember.setMeta = function setMeta(obj, property, value) {
-  var meta = Ember.meta(obj, true);
-  meta[property] = value;
-  return value;
-};
-
-/**
-  @deprecated
-  @private
-
-  In order to store defaults for a class, a prototype may need to create
-  a default meta object, which will be inherited by any objects instantiated
-  from the class's constructor.
-
-  However, the properties of that meta object are only shallow-cloned,
-  so if a property is a hash (like the event system's `listeners` hash),
-  it will by default be shared across all instances of that class.
-
-  This method allows extensions to deeply clone a series of nested hashes or
-  other complex objects. For instance, the event system might pass
-  `['listeners', 'foo:change', 'ember157']` to `prepareMetaPath`, which will
-  walk down the keys provided.
-
-  For each key, if the key does not exist, it is created. If it already
-  exists and it was inherited from its constructor, the constructor's
-  key is cloned.
-
-  You can also pass false for `writable`, which will simply return
-  undefined if `prepareMetaPath` discovers any part of the path that
-  shared or undefined.
-
-  @method metaPath
-  @for Ember
-  @param {Object} obj The object whose meta we are examining
-  @param {Array} path An array of keys to walk down
-  @param {Boolean} writable whether or not to create a new meta
-    (or meta property) if one does not already exist or if it's
-    shared with its constructor
-*/
-Ember.metaPath = function metaPath(obj, path, writable) {
-  Ember.deprecate("Ember.metaPath is deprecated and will be removed from future releases.");
-  var meta = Ember.meta(obj, writable), keyName, value;
-
-  for (var i=0, l=path.length; i<l; i++) {
-    keyName = path[i];
-    value = meta[keyName];
-
-    if (!value) {
-      if (!writable) { return undefined; }
-      value = meta[keyName] = { __ember_source__: obj };
-    } else if (value.__ember_source__ !== obj) {
-      if (!writable) { return undefined; }
-      value = meta[keyName] = o_create(value);
-      value.__ember_source__ = obj;
-    }
-
-    meta = value;
-  }
-
-  return value;
-};
-
-/**
-  Wraps the passed function so that `this._super` will point to the superFunc
-  when the function is invoked. This is the primitive we use to implement
-  calls to super.
-
-  @private
-  @method wrap
-  @for Ember
-  @param {Function} func The function to call
-  @param {Function} superFunc The super function.
-  @return {Function} wrapped function.
-*/
-Ember.wrap = function(func, superFunc) {
-  function superWrapper() {
-    var ret, sup = this.__nextSuper;
-    this.__nextSuper = superFunc;
-    ret = func.apply(this, arguments);
-    this.__nextSuper = sup;
-    return ret;
-  }
-
-  superWrapper.wrappedFunction = func;
-  superWrapper.__ember_observes__ = func.__ember_observes__;
-  superWrapper.__ember_observesBefore__ = func.__ember_observesBefore__;
-  superWrapper.__ember_listens__ = func.__ember_listens__;
-
-  return superWrapper;
-};
-
-/**
-  Returns true if the passed object is an array or Array-like.
-
-  Ember Array Protocol:
-
-    - the object has an objectAt property
-    - the object is a native Array
-    - the object is an Object, and has a length property
-
-  Unlike `Ember.typeOf` this method returns true even if the passed object is
-  not formally array but appears to be array-like (i.e. implements `Ember.Array`)
-
-  ```javascript
-  Ember.isArray();                                            // false
-  Ember.isArray([]);                                          // true
-  Ember.isArray( Ember.ArrayProxy.create({ content: [] }) );  // true
-  ```
-
-  @method isArray
-  @for Ember
-  @param {Object} obj The object to test
-  @return {Boolean} true if the passed object is an array or Array-like
-*/
-Ember.isArray = function(obj) {
-  if (!obj || obj.setInterval) { return false; }
-  if (Array.isArray && Array.isArray(obj)) { return true; }
-  if (Ember.Array && Ember.Array.detect(obj)) { return true; }
-  if ((obj.length !== undefined) && 'object'===typeof obj) { return true; }
-  return false;
-};
-
-/**
-  Forces the passed object to be part of an array. If the object is already
-  an array or array-like, returns the object. Otherwise adds the object to
-  an array. If obj is `null` or `undefined`, returns an empty array.
-
-  ```javascript
-  Ember.makeArray();                           // []
-  Ember.makeArray(null);                       // []
-  Ember.makeArray(undefined);                  // []
-  Ember.makeArray('lindsay');                  // ['lindsay']
-  Ember.makeArray([1,2,42]);                   // [1,2,42]
-
-  var controller = Ember.ArrayProxy.create({ content: [] });
-  Ember.makeArray(controller) === controller;  // true
-  ```
-
-  @method makeArray
-  @for Ember
-  @param {Object} obj the object
-  @return {Array}
-*/
-Ember.makeArray = function(obj) {
-  if (obj === null || obj === undefined) { return []; }
-  return Ember.isArray(obj) ? obj : [obj];
-};
-
-function canInvoke(obj, methodName) {
-  return !!(obj && typeof obj[methodName] === 'function');
-}
-
-/**
-  Checks to see if the `methodName` exists on the `obj`.
-
-  ```javascript
-  var foo = {bar: Ember.K, baz: null};
-  Ember.canInvoke(foo, 'bar'); // true
-  Ember.canInvoke(foo, 'baz'); // false
-  Ember.canInvoke(foo, 'bat'); // false
-  ```
-
-  @method canInvoke
-  @for Ember
-  @param {Object} obj The object to check for the method
-  @param {String} methodName The method name to check for
-  @return {Boolean}
-*/
-Ember.canInvoke = canInvoke;
-
-/**
-  Checks to see if the `methodName` exists on the `obj`,
-  and if it does, invokes it with the arguments passed.
-
-  ```javascript
-  var d = new Date('03/15/2013');
-  Ember.tryInvoke(d, 'getTime'); // 1363320000000
-  Ember.tryInvoke(d, 'setFullYear', [2014]); // 1394856000000
-  Ember.tryInvoke(d, 'noSuchMethod', [2014]); // undefined
-  ```
-
-  @method tryInvoke
-  @for Ember
-  @param {Object} obj The object to check for the method
-  @param {String} methodName The method name to check for
-  @param {Array} [args] The arguments to pass to the method
-  @return {*} the return value of the invoked method or undefined if it cannot be invoked
-*/
-Ember.tryInvoke = function(obj, methodName, args) {
-  if (canInvoke(obj, methodName)) {
-    return obj[methodName].apply(obj, args || []);
-  }
-};
-
-// https://github.com/emberjs/ember.js/pull/1617
-var needsFinallyFix = (function() {
-  var count = 0;
-  try{
-    try { }
-    finally {
-      count++;
-      throw new Error('needsFinallyFixTest');
-    }
-  } catch (e) {}
-
-  return count !== 1;
-})();
-
-/**
-  Provides try { } finally { } functionality, while working
-  around Safari's double finally bug.
-
-  ```javascript
-  var tryable = function() {
-    someResource.lock();
-    runCallback(); // May throw error.
-  };
-  var finalizer = function() {
-    someResource.unlock();
-  };
-  Ember.tryFinally(tryable, finalizer);
-  ```
-
-  @method tryFinally
-  @for Ember
-  @param {Function} tryable The function to run the try callback
-  @param {Function} finalizer The function to run the finally callback
-  @param {Object} [binding] The optional calling object. Defaults to 'this'
-  @return {*} The return value is the that of the finalizer,
-  unless that value is undefined, in which case it is the return value
-  of the tryable
-*/
-
-if (needsFinallyFix) {
-  Ember.tryFinally = function(tryable, finalizer, binding) {
-    var result, finalResult, finalError;
-
-    binding = binding || this;
-
-    try {
-      result = tryable.call(binding);
-    } finally {
-      try {
-        finalResult = finalizer.call(binding);
-      } catch (e) {
-        finalError = e;
-      }
-    }
-
-    if (finalError) { throw finalError; }
-
-    return (finalResult === undefined) ? result : finalResult;
-  };
-} else {
-  Ember.tryFinally = function(tryable, finalizer, binding) {
-    var result, finalResult;
-
-    binding = binding || this;
-
-    try {
-      result = tryable.call(binding);
-    } finally {
-      finalResult = finalizer.call(binding);
-    }
-
-    return (finalResult === undefined) ? result : finalResult;
-  };
-}
-
-/**
-  Provides try { } catch finally { } functionality, while working
-  around Safari's double finally bug.
-
-  ```javascript
-  var tryable = function() {
-    for (i=0, l=listeners.length; i<l; i++) {
-      listener = listeners[i];
-      beforeValues[i] = listener.before(name, time(), payload);
-    }
-
-    return callback.call(binding);
-  };
-
-  var catchable = function(e) {
-    payload = payload || {};
-    payload.exception = e;
-  };
-
-  var finalizer = function() {
-    for (i=0, l=listeners.length; i<l; i++) {
-      listener = listeners[i];
-      listener.after(name, time(), payload, beforeValues[i]);
-    }
-  };
-  Ember.tryCatchFinally(tryable, catchable, finalizer);
-  ```
-
-  @method tryCatchFinally
-  @for Ember
-  @param {Function} tryable The function to run the try callback
-  @param {Function} catchable The function to run the catchable callback
-  @param {Function} finalizer The function to run the finally callback
-  @param {Object} [binding] The optional calling object. Defaults to 'this'
-  @return {*} The return value is the that of the finalizer,
-  unless that value is undefined, in which case it is the return value
-  of the tryable.
-*/
-if (needsFinallyFix) {
-  Ember.tryCatchFinally = function(tryable, catchable, finalizer, binding) {
-    var result, finalResult, finalError;
-
-    binding = binding || this;
-
-    try {
-      result = tryable.call(binding);
-    } catch(error) {
-      result = catchable.call(binding, error);
-    } finally {
-      try {
-        finalResult = finalizer.call(binding);
-      } catch (e) {
-        finalError = e;
-      }
-    }
-
-    if (finalError) { throw finalError; }
-
-    return (finalResult === undefined) ? result : finalResult;
-  };
-} else {
-  Ember.tryCatchFinally = function(tryable, catchable, finalizer, binding) {
-    var result, finalResult;
-
-    binding = binding || this;
-
-    try {
-      result = tryable.call(binding);
-    } catch(error) {
-      result = catchable.call(binding, error);
-    } finally {
-      finalResult = finalizer.call(binding);
-    }
-
-    return (finalResult === undefined) ? result : finalResult;
-  };
-}
-
-// ........................................
-// TYPING & ARRAY MESSAGING
-//
-
-var TYPE_MAP = {};
-var t = "Boolean Number String Function Array Date RegExp Object".split(" ");
-Ember.ArrayPolyfills.forEach.call(t, function(name) {
-  TYPE_MAP[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-var toString = Object.prototype.toString;
-
-/**
-  Returns a consistent type for the passed item.
-
-  Use this instead of the built-in `typeof` to get the type of an item.
-  It will return the same result across all browsers and includes a bit
-  more detail. Here is what will be returned:
-
-      | Return Value  | Meaning                                              |
-      |---------------|------------------------------------------------------|
-      | 'string'      | String primitive or String object.                   |
-      | 'number'      | Number primitive or Number object.                   |
-      | 'boolean'     | Boolean primitive or Boolean object.                 |
-      | 'null'        | Null value                                           |
-      | 'undefined'   | Undefined value                                      |
-      | 'function'    | A function                                           |
-      | 'array'       | An instance of Array                                 |
-      | 'regexp'      | An instance of RegExp                                |
-      | 'date'        | An instance of Date                                  |
-      | 'class'       | An Ember class (created using Ember.Object.extend()) |
-      | 'instance'    | An Ember object instance                             |
-      | 'error'       | An instance of the Error object                      |
-      | 'object'      | A JavaScript object not inheriting from Ember.Object |
-
-  Examples:
-
-  ```javascript
-  Ember.typeOf();                       // 'undefined'
-  Ember.typeOf(null);                   // 'null'
-  Ember.typeOf(undefined);              // 'undefined'
-  Ember.typeOf('michael');              // 'string'
-  Ember.typeOf(new String('michael'));  // 'string'
-  Ember.typeOf(101);                    // 'number'
-  Ember.typeOf(new Number(101));        // 'number'
-  Ember.typeOf(true);                   // 'boolean'
-  Ember.typeOf(new Boolean(true));      // 'boolean'
-  Ember.typeOf(Ember.makeArray);        // 'function'
-  Ember.typeOf([1,2,90]);               // 'array'
-  Ember.typeOf(/abc/);                  // 'regexp'
-  Ember.typeOf(new Date());             // 'date'
-  Ember.typeOf(Ember.Object.extend());  // 'class'
-  Ember.typeOf(Ember.Object.create());  // 'instance'
-  Ember.typeOf(new Error('teamocil'));  // 'error'
-
-  // "normal" JavaScript object
-  Ember.typeOf({a: 'b'});              // 'object'
-  ```
-
-  @method typeOf
-  @for Ember
-  @param {Object} item the item to check
-  @return {String} the type
-*/
-Ember.typeOf = function(item) {
-  var ret;
-
-  ret = (item === null || item === undefined) ? String(item) : TYPE_MAP[toString.call(item)] || 'object';
-
-  if (ret === 'function') {
-    if (Ember.Object && Ember.Object.detect(item)) ret = 'class';
-  } else if (ret === 'object') {
-    if (item instanceof Error) ret = 'error';
-    else if (Ember.Object && item instanceof Ember.Object) ret = 'instance';
-    else if (item instanceof Date) ret = 'date';
-  }
-
-  return ret;
-};
-
-/**
-  Convenience method to inspect an object. This method will attempt to
-  convert the object into a useful string description.
-
-  It is a pretty simple implementation. If you want something more robust,
-  use something like JSDump: https://github.com/NV/jsDump
-
-  @method inspect
-  @for Ember
-  @param {Object} obj The object you want to inspect.
-  @return {String} A description of the object
-*/
-Ember.inspect = function(obj) {
-  var type = Ember.typeOf(obj);
-  if (type === 'array') {
-    return '[' + obj + ']';
-  }
-  if (type !== 'object') {
-    return obj + '';
-  }
-
-  var v, ret = [];
-  for(var key in obj) {
-    if (obj.hasOwnProperty(key)) {
-      v = obj[key];
-      if (v === 'toString') { continue; } // ignore useless items
-      if (Ember.typeOf(v) === 'function') { v = "function() { ... }"; }
-      ret.push(key + ": " + v);
-    }
-  }
-  return "{" + ret.join(", ") + "}";
-};
-
-
-
-})();
-
-
-
-(function() {
-// Ember.tryCatchFinally
-
-/**
-  The purpose of the Ember Instrumentation module is
-  to provide efficient, general-purpose instrumentation
-  for Ember.
-
-  Subscribe to a listener by using `Ember.subscribe`:
-
-  ```javascript
-  Ember.subscribe("render", {
-    before: function(name, timestamp, payload) {
-
-    },
-
-    after: function(name, timestamp, payload) {
-
-    }
-  });
-  ```
-
-  If you return a value from the `before` callback, that same
-  value will be passed as a fourth parameter to the `after`
-  callback.
-
-  Instrument a block of code by using `Ember.instrument`:
-
-  ```javascript
-  Ember.instrument("render.handlebars", payload, function() {
-    // rendering logic
-  }, binding);
-  ```
-
-  Event names passed to `Ember.instrument` are namespaced
-  by periods, from more general to more specific. Subscribers
-  can listen for events by whatever level of granularity they
-  are interested in.
-
-  In the above example, the event is `render.handlebars`,
-  and the subscriber listened for all events beginning with
-  `render`. It would receive callbacks for events named
-  `render`, `render.handlebars`, `render.container`, or
-  even `render.handlebars.layout`.
-
-  @class Instrumentation
-  @namespace Ember
-  @static
-*/
-Ember.Instrumentation = {};
-
-var subscribers = [], cache = {};
-
-var populateListeners = function(name) {
-  var listeners = [], subscriber;
-
-  for (var i=0, l=subscribers.length; i<l; i++) {
-    subscriber = subscribers[i];
-    if (subscriber.regex.test(name)) {
-      listeners.push(subscriber.object);
-    }
-  }
-
-  cache[name] = listeners;
-  return listeners;
-};
-
-var time = (function() {
-  var perf = 'undefined' !== typeof window ? window.performance || {} : {};
-  var fn = perf.now || perf.mozNow || perf.webkitNow || perf.msNow || perf.oNow;
-  // fn.bind will be available in all the browsers that support the advanced window.performance... ;-)
-  return fn ? fn.bind(perf) : function() { return +new Date(); };
-})();
-
-/**
-  Notifies event's subscribers, calls `before` and `after` hooks.
-
-  @method instrument
-  @namespace Ember.Instrumentation
-
-  @param {String} [name] Namespaced event name.
-  @param {Object} payload
-  @param {Function} callback Function that you're instrumenting.
-  @param {Object} binding Context that instrument function is called with.
-*/
-Ember.Instrumentation.instrument = function(name, payload, callback, binding) {
-  var listeners = cache[name], timeName, ret;
-
-  if (Ember.STRUCTURED_PROFILE) {
-    timeName = name + ": " + payload.object;
-    console.time(timeName);
-  }
-
-  if (!listeners) {
-    listeners = populateListeners(name);
-  }
-
-  if (listeners.length === 0) {
-    ret = callback.call(binding);
-    if (Ember.STRUCTURED_PROFILE) { console.timeEnd(timeName); }
-    return ret;
-  }
-
-  var beforeValues = [], listener, i, l;
-
-  function tryable() {
-    for (i=0, l=listeners.length; i<l; i++) {
-      listener = listeners[i];
-      beforeValues[i] = listener.before(name, time(), payload);
-    }
-
-    return callback.call(binding);
-  }
-
-  function catchable(e) {
-    payload = payload || {};
-    payload.exception = e;
-  }
-
-  function finalizer() {
-    for (i=0, l=listeners.length; i<l; i++) {
-      listener = listeners[i];
-      listener.after(name, time(), payload, beforeValues[i]);
-    }
-
-    if (Ember.STRUCTURED_PROFILE) {
-      console.timeEnd(timeName);
-    }
-  }
-
-  return Ember.tryCatchFinally(tryable, catchable, finalizer);
-};
-
-/**
-  Subscribes to a particular event or instrumented block of code.
-
-  @method subscribe
-  @namespace Ember.Instrumentation
-
-  @param {String} [pattern] Namespaced event name.
-  @param {Object} [object] Before and After hooks.
-
-  @return {Subscriber}
-*/
-Ember.Instrumentation.subscribe = function(pattern, object) {
-  var paths = pattern.split("."), path, regex = [];
-
-  for (var i=0, l=paths.length; i<l; i++) {
-    path = paths[i];
-    if (path === "*") {
-      regex.push("[^\\.]*");
-    } else {
-      regex.push(path);
-    }
-  }
-
-  regex = regex.join("\\.");
-  regex = regex + "(\\..*)?";
-
-  var subscriber = {
-    pattern: pattern,
-    regex: new RegExp("^" + regex + "$"),
-    object: object
-  };
-
-  subscribers.push(subscriber);
-  cache = {};
-
-  return subscriber;
-};
-
-/**
-  Unsubscribes from a particular event or instrumented block of code.
-
-  @method unsubscribe
-  @namespace Ember.Instrumentation
-
-  @param {Object} [subscriber]
-*/
-Ember.Instrumentation.unsubscribe = function(subscriber) {
-  var index;
-
-  for (var i=0, l=subscribers.length; i<l; i++) {
-    if (subscribers[i] === subscriber) {
-      index = i;
-    }
-  }
-
-  subscribers.splice(index, 1);
-  cache = {};
-};
-
-/**
-  Resets `Ember.Instrumentation` by flushing list of subscribers.
-
-  @method reset
-  @namespace Ember.Instrumentation
-*/
-Ember.Instrumentation.reset = function() {
-  subscribers = [];
-  cache = {};
-};
-
-Ember.instrument = Ember.Instrumentation.instrument;
-Ember.subscribe = Ember.Instrumentation.subscribe;
-})();
-
-
-
-(function() {
-var map, forEach, indexOf, splice, filter;
-map     = Array.prototype.map     || Ember.ArrayPolyfills.map;
-forEach = Array.prototype.forEach || Ember.ArrayPolyfills.forEach;
-indexOf = Array.prototype.indexOf || Ember.ArrayPolyfills.indexOf;
-filter = Array.prototype.filter || Ember.ArrayPolyfills.filter;
-splice = Array.prototype.splice;
-
-/**
- * Defines some convenience methods for working with Enumerables.
- * `Ember.EnumerableUtils` uses `Ember.ArrayPolyfills` when necessary.
- *
- * @class EnumerableUtils
- * @namespace Ember
- * @static
- * */
-var utils = Ember.EnumerableUtils = {
-  /**
-   * Calls the map function on the passed object with a specified callback. This
-   * uses `Ember.ArrayPolyfill`'s-map method when necessary.
-   *
-   * @method map
-   * @param {Object} obj The object that should be mapped
-   * @param {Function} callback The callback to execute
-   * @param {Object} thisArg Value to use as this when executing *callback*
-   *
-   * @return {Array} An array of mapped values.
-   */
-  map: function(obj, callback, thisArg) {
-    return obj.map ? obj.map.call(obj, callback, thisArg) : map.call(obj, callback, thisArg);
-  },
-
-  /**
-   * Calls the forEach function on the passed object with a specified callback. This
-   * uses `Ember.ArrayPolyfill`'s-forEach method when necessary.
-   *
-   * @method forEach
-   * @param {Object} obj The object to call forEach on
-   * @param {Function} callback The callback to execute
-   * @param {Object} thisArg Value to use as this when executing *callback*
-   *
-   */
-  forEach: function(obj, callback, thisArg) {
-    return obj.forEach ? obj.forEach.call(obj, callback, thisArg) : forEach.call(obj, callback, thisArg);
-  },
-
-  /**
-   * Calls the filter function on the passed object with a specified callback. This
-   * uses `Ember.ArrayPolyfill`'s-filter method when necessary.
-   *
-   * @method filter
-   * @param {Object} obj The object to call filter on
-   * @param {Function} callback The callback to execute
-   * @param {Object} thisArg Value to use as this when executing *callback*
-   *
-   * @return {Array} An array containing the filtered values
-   */
-  filter: function(obj, callback, thisArg) {
-    return obj.filter ? obj.filter.call(obj, callback, thisArg) : filter.call(obj, callback, thisArg);
-  },
-
-  /**
-   * Calls the indexOf function on the passed object with a specified callback. This
-   * uses `Ember.ArrayPolyfill`'s-indexOf method when necessary.
-   *
-   * @method indexOf
-   * @param {Object} obj The object to call indexOn on
-   * @param {Function} callback The callback to execute
-   * @param {Object} index The index to start searching from
-   *
-   */
-  indexOf: function(obj, element, index) {
-    return obj.indexOf ? obj.indexOf.call(obj, element, index) : indexOf.call(obj, element, index);
-  },
-
-  /**
-   * Returns an array of indexes of the first occurrences of the passed elements
-   * on the passed object.
-   *
-   * ```javascript
-   *  var array = [1, 2, 3, 4, 5];
-   *  Ember.EnumerableUtils.indexesOf(array, [2, 5]); // [1, 4]
-   *
-   *  var fubar = "Fubarr";
-   *  Ember.EnumerableUtils.indexesOf(fubar, ['b', 'r']); // [2, 4]
-   * ```
-   *
-   * @method indexesOf
-   * @param {Object} obj The object to check for element indexes
-   * @param {Array} elements The elements to search for on *obj*
-   *
-   * @return {Array} An array of indexes.
-   *
-   */
-  indexesOf: function(obj, elements) {
-    return elements === undefined ? [] : utils.map(elements, function(item) {
-      return utils.indexOf(obj, item);
-    });
-  },
-
-  /** 
-   * Adds an object to an array. If the array already includes the object this
-   * method has no effect.
-   *
-   * @method addObject
-   * @param {Array} array The array the passed item should be added to
-   * @param {Object} item The item to add to the passed array
-   *
-   * @return 'undefined'
-   */
-  addObject: function(array, item) {
-    var index = utils.indexOf(array, item);
-    if (index === -1) { array.push(item); }
-  },
-
-  /**
-   * Removes an object from an array. If the array does not contain the passed
-   * object this method has no effect.
-   *
-   * @method removeObject
-   * @param {Array} array The array to remove the item from.
-   * @param {Object} item The item to remove from the passed array.
-   *
-   * @return 'undefined'
-   */
-  removeObject: function(array, item) {
-    var index = utils.indexOf(array, item);
-    if (index !== -1) { array.splice(index, 1); }
-  },
-
-  _replace: function(array, idx, amt, objects) {
-    var args = [].concat(objects), chunk, ret = [],
-        // https://code.google.com/p/chromium/issues/detail?id=56588
-        size = 60000, start = idx, ends = amt, count;
-
-    while (args.length) {
-      count = ends > size ? size : ends;
-      if (count <= 0) { count = 0; }
-
-      chunk = args.splice(0, size);
-      chunk = [start, count].concat(chunk);
-
-      start += size;
-      ends -= count;
-
-      ret = ret.concat(splice.apply(array, chunk));
-    }
-    return ret;
-  },
-
-  /**
-   * Replaces objects in an array with the passed objects.
-   *
-   * ```javascript
-   *   var array = [1,2,3];
-   *   Ember.EnumerableUtils.replace(array, 1, 2, [4, 5]); // [1, 4, 5]
-   *
-   *   var array = [1,2,3];
-   *   Ember.EnumerableUtils.replace(array, 1, 1, [4, 5]); // [1, 4, 5, 3]
-   *
-   *   var array = [1,2,3];
-   *   Ember.EnumerableUtils.replace(array, 10, 1, [4, 5]); // [1, 2, 3, 4, 5]
-   * ```
-   * 
-   * @method replace
-   * @param {Array} array The array the objects should be inserted into.
-   * @param {Number} idx Starting index in the array to replace. If *idx* >=
-   * length, then append to the end of the array.
-   * @param {Number} amt Number of elements that should be removed from the array,
-   * starting at *idx*
-   * @param {Array} objects An array of zero or more objects that should be
-   * inserted into the array at *idx*
-   *
-   * @return {Array} The modified array.
-   */
-  replace: function(array, idx, amt, objects) {
-    if (array.replace) {
-      return array.replace(idx, amt, objects);
-    } else {
-      return utils._replace(array, idx, amt, objects);
-    }
-  },
-
-  /**
-   * Calculates the intersection of two arrays. This method returns a new array
-   * filled with the records that the two passed arrays share with each other. 
-   * If there is no intersection, an empty array will be returned.
-   *
-   * ```javascript
-   * var array1 = [1, 2, 3, 4, 5];
-   * var array2 = [1, 3, 5, 6, 7];
-   *
-   * Ember.EnumerableUtils.intersection(array1, array2); // [1, 3, 5]
-   *
-   * var array1 = [1, 2, 3];
-   * var array2 = [4, 5, 6];
-   *
-   * Ember.EnumerableUtils.intersection(array1, array2); // []
-   * ```
-   *
-   * @method intersection
-   * @param {Array} array1 The first array
-   * @param {Array} array2 The second array
-   *
-   * @return {Array} The intersection of the two passed arrays.
-   */
-  intersection: function(array1, array2) {
-    var intersection = [];
-
-    utils.forEach(array1, function(element) {
-      if (utils.indexOf(array2, element) >= 0) {
-        intersection.push(element);
-      }
-    });
-
-    return intersection;
-  }
-};
-
-})();
-
-
-
-(function() {
-/**
-@module ember-metal
-*/
-
-var META_KEY = Ember.META_KEY, get;
-
-var MANDATORY_SETTER = Ember.ENV.MANDATORY_SETTER;
-
-var IS_GLOBAL_PATH = /^([A-Z$]|([0-9][A-Z$])).*[\.\*]/;
-var HAS_THIS  = /^this[\.\*]/;
-var FIRST_KEY = /^([^\.\*]+)/;
-
-// ..........................................................
-// GET AND SET
-//
-// If we are on a platform that supports accessors we can use those.
-// Otherwise simulate accessors by looking up the property directly on the
-// object.
-
-/**
-  Gets the value of a property on an object. If the property is computed,
-  the function will be invoked. If the property is not defined but the
-  object implements the `unknownProperty` method then that will be invoked.
-
-  If you plan to run on IE8 and older browsers then you should use this
-  method anytime you want to retrieve a property on an object that you don't
-  know for sure is private. (Properties beginning with an underscore '_'
-  are considered private.)
-
-  On all newer browsers, you only need to use this method to retrieve
-  properties if the property might not be defined on the object and you want
-  to respect the `unknownProperty` handler. Otherwise you can ignore this
-  method.
-
-  Note that if the object itself is `undefined`, this method will throw
-  an error.
-
-  @method get
-  @for Ember
-  @param {Object} obj The object to retrieve from.
-  @param {String} keyName The property key to retrieve
-  @return {Object} the property value or `null`.
-*/
-get = function get(obj, keyName) {
-  // Helpers that operate with 'this' within an #each
-  if (keyName === '') {
-    return obj;
-  }
-
-  if (!keyName && 'string'===typeof obj) {
-    keyName = obj;
-    obj = null;
-  }
-
-  Ember.assert("Cannot call get with "+ keyName +" key.", !!keyName);
-  Ember.assert("Cannot call get with '"+ keyName +"' on an undefined object.", obj !== undefined);
-
-  if (obj === null || keyName.indexOf('.') !== -1) {
-    return getPath(obj, keyName);
-  }
-
-  var meta = obj[META_KEY], desc = meta && meta.descs[keyName], ret;
-  if (desc) {
-    return desc.get(obj, keyName);
-  } else {
-    if (MANDATORY_SETTER && meta && meta.watching[keyName] > 0) {
-      ret = meta.values[keyName];
-    } else {
-      ret = obj[keyName];
-    }
-
-    if (ret === undefined &&
-        'object' === typeof obj && !(keyName in obj) && 'function' === typeof obj.unknownProperty) {
-      return obj.unknownProperty(keyName);
-    }
-
-    return ret;
-  }
-};
-
-// Currently used only by Ember Data tests
-if (Ember.config.overrideAccessors) {
-  Ember.get = get;
-  Ember.config.overrideAccessors();
-  get = Ember.get;
-}
-
-/**
-  Normalizes a target/path pair to reflect that actual target/path that should
-  be observed, etc. This takes into account passing in global property
-  paths (i.e. a path beginning with a captial letter not defined on the
-  target) and * separators.
-
-  @private
-  @method normalizeTuple
-  @for Ember
-  @param {Object} target The current target. May be `null`.
-  @param {String} path A path on the target or a global property path.
-  @return {Array} a temporary array with the normalized target/path pair.
-*/
-var normalizeTuple = Ember.normalizeTuple = function(target, path) {
-  var hasThis  = HAS_THIS.test(path),
-      isGlobal = !hasThis && IS_GLOBAL_PATH.test(path),
-      key;
-
-  if (!target || isGlobal) target = Ember.lookup;
-  if (hasThis) path = path.slice(5);
-
-  if (target === Ember.lookup) {
-    key = path.match(FIRST_KEY)[0];
-    target = get(target, key);
-    path   = path.slice(key.length+1);
-  }
-
-  // must return some kind of path to be valid else other things will break.
-  if (!path || path.length===0) throw new Ember.Error('Path cannot be empty');
-
-  return [ target, path ];
-};
-
-var getPath = Ember._getPath = function(root, path) {
-  var hasThis, parts, tuple, idx, len;
-
-  // If there is no root and path is a key name, return that
-  // property from the global object.
-  // E.g. get('Ember') -> Ember
-  if (root === null && path.indexOf('.') === -1) { return get(Ember.lookup, path); }
-
-  // detect complicated paths and normalize them
-  hasThis  = HAS_THIS.test(path);
-
-  if (!root || hasThis) {
-    tuple = normalizeTuple(root, path);
-    root = tuple[0];
-    path = tuple[1];
-    tuple.length = 0;
-  }
-
-  parts = path.split(".");
-  len = parts.length;
-  for (idx = 0; root != null && idx < len; idx++) {
-    root = get(root, parts[idx], true);
-    if (root && root.isDestroyed) { return undefined; }
-  }
-  return root;
-};
-
-Ember.getWithDefault = function(root, key, defaultValue) {
-  var value = get(root, key);
-
-  if (value === undefined) { return defaultValue; }
-  return value;
-};
-
-
-Ember.get = get;
-
-})();
-
-
-
-(function() {
-/**
-@module ember-metal
-*/
-
-var o_create = Ember.create,
-    metaFor = Ember.meta,
-    META_KEY = Ember.META_KEY,
-    a_slice = [].slice,
-    /* listener flags */
-    ONCE = 1, SUSPENDED = 2;
-
-/*
-  The event system uses a series of nested hashes to store listeners on an
-  object. When a listener is registered, or when an event arrives, these
-  hashes are consulted to determine which target and action pair to invoke.
-
-  The hashes are stored in the object's meta hash, and look like this:
-
-      // Object's meta hash
-      {
-        listeners: {       // variable name: `listenerSet`
-          "foo:changed": [ // variable name: `actions`
-            target, method, flags
-          ]
-        }
-      }
-
-*/
-
-function indexOf(array, target, method) {
-  var index = -1;
-  // hashes are added to the end of the event array
-  // so it makes sense to start searching at the end
-  // of the array and search in reverse
-  for (var i = array.length - 3 ; i >=0; i -= 3) {
-    if (target === array[i] && method === array[i + 1]) {
-         index = i; break;
-    }
-  }
-  return index;
-}
-
-function actionsFor(obj, eventName) {
-  var meta = metaFor(obj, true),
-      actions;
-
-  if (!meta.listeners) { meta.listeners = {}; }
-
-  if (!meta.hasOwnProperty('listeners')) {
-    // setup inherited copy of the listeners object
-    meta.listeners = o_create(meta.listeners);
-  }
-
-  actions = meta.listeners[eventName];
-
-  // if there are actions, but the eventName doesn't exist in our listeners, then copy them from the prototype
-  if (actions && !meta.listeners.hasOwnProperty(eventName)) {
-    actions = meta.listeners[eventName] = meta.listeners[eventName].slice();
-  } else if (!actions) {
-    actions = meta.listeners[eventName] = [];
-  }
-
-  return actions;
-}
-
-function actionsUnion(obj, eventName, otherActions) {
-  var meta = obj[META_KEY],
-      actions = meta && meta.listeners && meta.listeners[eventName];
-
-  if (!actions) { return; }
-  for (var i = actions.length - 3; i >= 0; i -= 3) {
-    var target = actions[i],
-        method = actions[i+1],
-        flags = actions[i+2],
-        actionIndex = indexOf(otherActions, target, method);
-
-    if (actionIndex === -1) {
-      otherActions.push(target, method, flags);
-    }
-  }
-}
-
-function actionsDiff(obj, eventName, otherActions) {
-  var meta = obj[META_KEY],
-      actions = meta && meta.listeners && meta.listeners[eventName],
-      diffActions = [];
-
-  if (!actions) { return; }
-  for (var i = actions.length - 3; i >= 0; i -= 3) {
-    var target = actions[i],
-        method = actions[i+1],
-        flags = actions[i+2],
-        actionIndex = indexOf(otherActions, target, method);
-
-    if (actionIndex !== -1) { continue; }
-
-    otherActions.push(target, method, flags);
-    diffActions.push(target, method, flags);
-  }
-
-  return diffActions;
-}
-
-/**
-  Add an event listener
-
-  @method addListener
-  @for Ember
-  @param obj
-  @param {String} eventName
-  @param {Object|Function} targetOrMethod A target object or a function
-  @param {Function|String} method A function or the name of a function to be called on `target`
-  @param {Boolean} once A flag whether a function should only be called once
-*/
-function addListener(obj, eventName, target, method, once) {
-  Ember.assert("You must pass at least an object and event name to Ember.addListener", !!obj && !!eventName);
-
-  if (!method && 'function' === typeof target) {
-    method = target;
-    target = null;
-  }
-
-  var actions = actionsFor(obj, eventName),
-      actionIndex = indexOf(actions, target, method),
-      flags = 0;
-
-  if (once) flags |= ONCE;
-
-  if (actionIndex !== -1) { return; }
-
-  actions.push(target, method, flags);
-
-  if ('function' === typeof obj.didAddListener) {
-    obj.didAddListener(eventName, target, method);
-  }
-}
-
-/**
-  Remove an event listener
-
-  Arguments should match those passed to `Ember.addListener`.
-
-  @method removeListener
-  @for Ember
-  @param obj
-  @param {String} eventName
-  @param {Object|Function} targetOrMethod A target object or a function
-  @param {Function|String} method A function or the name of a function to be called on `target`
-*/
-function removeListener(obj, eventName, target, method) {
-  Ember.assert("You must pass at least an object and event name to Ember.removeListener", !!obj && !!eventName);
-
-  if (!method && 'function' === typeof target) {
-    method = target;
-    target = null;
-  }
-
-  function _removeListener(target, method) {
-    var actions = actionsFor(obj, eventName),
-        actionIndex = indexOf(actions, target, method);
-
-    // action doesn't exist, give up silently
-    if (actionIndex === -1) { return; }
-
-    actions.splice(actionIndex, 3);
-
-    if ('function' === typeof obj.didRemoveListener) {
-      obj.didRemoveListener(eventName, target, method);
-    }
-  }
-
-  if (method) {
-    _removeListener(target, method);
-  } else {
-    var meta = obj[META_KEY],
-        actions = meta && meta.listeners && meta.listeners[eventName];
-
-    if (!actions) { return; }
-    for (var i = actions.length - 3; i >= 0; i -= 3) {
-      _removeListener(actions[i], actions[i+1]);
-    }
-  }
-}
-
-/**
-  Suspend listener during callback.
-
-  This should only be used by the target of the event listener
-  when it is taking an action that would cause the event, e.g.
-  an object might suspend its property change listener while it is
-  setting that property.
-
-  @method suspendListener
-  @for Ember
-
-  @private
-  @param obj
-  @param {String} eventName
-  @param {Object|Function} targetOrMethod A target object or a function
-  @param {Function|String} method A function or the name of a function to be called on `target`
-  @param {Function} callback
-*/
-function suspendListener(obj, eventName, target, method, callback) {
-  if (!method && 'function' === typeof target) {
-    method = target;
-    target = null;
-  }
-
-  var actions = actionsFor(obj, eventName),
-      actionIndex = indexOf(actions, target, method);
-
-  if (actionIndex !== -1) {
-    actions[actionIndex+2] |= SUSPENDED; // mark the action as suspended
-  }
-
-  function tryable()   { return callback.call(target); }
-  function finalizer() { if (actionIndex !== -1) { actions[actionIndex+2] &= ~SUSPENDED; } }
-
-  return Ember.tryFinally(tryable, finalizer);
-}
-
-/**
-  Suspends multiple listeners during a callback.
-
-  @method suspendListeners
-  @for Ember
-
-  @private
-  @param obj
-  @param {Array} eventName Array of event names
-  @param {Object|Function} targetOrMethod A target object or a function
-  @param {Function|String} method A function or the name of a function to be called on `target`
-  @param {Function} callback
-*/
-function suspendListeners(obj, eventNames, target, method, callback) {
-  if (!method && 'function' === typeof target) {
-    method = target;
-    target = null;
-  }
-
-  var suspendedActions = [],
-      actionsList = [],
-      eventName, actions, i, l;
-
-  for (i=0, l=eventNames.length; i<l; i++) {
-    eventName = eventNames[i];
-    actions = actionsFor(obj, eventName);
-    var actionIndex = indexOf(actions, target, method);
-
-    if (actionIndex !== -1) {
-      actions[actionIndex+2] |= SUSPENDED;
-      suspendedActions.push(actionIndex);
-      actionsList.push(actions);
-    }
-  }
-
-  function tryable() { return callback.call(target); }
-
-  function finalizer() {
-    for (var i = 0, l = suspendedActions.length; i < l; i++) {
-      var actionIndex = suspendedActions[i];
-      actionsList[i][actionIndex+2] &= ~SUSPENDED;
-    }
-  }
-
-  return Ember.tryFinally(tryable, finalizer);
-}
-
-/**
-  Return a list of currently watched events
-
-  @private
-  @method watchedEvents
-  @for Ember
-  @param obj
-*/
-function watchedEvents(obj) {
-  var listeners = obj[META_KEY].listeners, ret = [];
-
-  if (listeners) {
-    for(var eventName in listeners) {
-      if (listeners[eventName]) { ret.push(eventName); }
-    }
-  }
-  return ret;
-}
-
-/**
-  Send an event. The execution of suspended listeners
-  is skipped, and once listeners are removed. A listener without
-  a target is executed on the passed object. If an array of actions
-  is not passed, the actions stored on the passed object are invoked.
-
-  @method sendEvent
-  @for Ember
-  @param obj
-  @param {String} eventName
-  @param {Array} params Optional parameters for each listener.
-  @param {Array} actions Optional array of actions (listeners).
-  @return true
-*/
-function sendEvent(obj, eventName, params, actions) {
-  // first give object a chance to handle it
-  if (obj !== Ember && 'function' === typeof obj.sendEvent) {
-    obj.sendEvent(eventName, params);
-  }
-
-  if (!actions) {
-    var meta = obj[META_KEY];
-    actions = meta && meta.listeners && meta.listeners[eventName];
-  }
-
-  if (!actions) { return; }
-
-  for (var i = actions.length - 3; i >= 0; i -= 3) { // looping in reverse for once listeners
-    var target = actions[i], method = actions[i+1], flags = actions[i+2];
-    if (!method) { continue; }
-    if (flags & SUSPENDED) { continue; }
-    if (flags & ONCE) { removeListener(obj, eventName, target, method); }
-    if (!target) { target = obj; }
-    if ('string' === typeof method) { method = target[method]; }
-    if (params) {
-      method.apply(target, params);
-    } else {
-      method.call(target);
-    }
-  }
-  return true;
-}
-
-/**
-  @private
-  @method hasListeners
-  @for Ember
-  @param obj
-  @param {String} eventName
-*/
-function hasListeners(obj, eventName) {
-  var meta = obj[META_KEY],
-      actions = meta && meta.listeners && meta.listeners[eventName];
-
-  return !!(actions && actions.length);
-}
-
-/**
-  @private
-  @method listenersFor
-  @for Ember
-  @param obj
-  @param {String} eventName
-*/
-function listenersFor(obj, eventName) {
-  var ret = [];
-  var meta = obj[META_KEY],
-      actions = meta && meta.listeners && meta.listeners[eventName];
-
-  if (!actions) { return ret; }
-
-  for (var i = 0, l = actions.length; i < l; i += 3) {
-    var target = actions[i],
-        method = actions[i+1];
-    ret.push([target, method]);
-  }
-
-  return ret;
-}
-
-/**
-  Define a property as a function that should be executed when
-  a specified event or events are triggered.
-
-
-  ``` javascript
-  var Job = Ember.Object.extend({
-    logCompleted: Ember.on('completed', function(){
-      console.log('Job completed!');
-    })
-  });
-  var job = Job.create();
-  Ember.sendEvent(job, 'completed'); // Logs "Job completed!"
- ```
-
-  @method on
-  @for Ember
-  @param {String} eventNames*
-  @param {Function} func
-  @return func
-*/
-Ember.on = function(){
-  var func = a_slice.call(arguments, -1)[0],
-      events = a_slice.call(arguments, 0, -1);
-  func.__ember_listens__ = events;
-  return func;
-};
-
-Ember.addListener = addListener;
-Ember.removeListener = removeListener;
-Ember._suspendListener = suspendListener;
-Ember._suspendListeners = suspendListeners;
-Ember.sendEvent = sendEvent;
-Ember.hasListeners = hasListeners;
-Ember.watchedEvents = watchedEvents;
-Ember.listenersFor = listenersFor;
-Ember.listenersDiff = actionsDiff;
-Ember.listenersUnion = actionsUnion;
-
-})();
-
-
-
-(function() {
-var guidFor = Ember.guidFor,
-    sendEvent = Ember.sendEvent;
-
-/*
-  this.observerSet = {
-    [senderGuid]: { // variable name: `keySet`
-      [keyName]: listIndex
-    }
-  },
-  this.observers = [
-    {
-      sender: obj,
-      keyName: keyName,
-      eventName: eventName,
-      listeners: [
-        [target, method, flags]
-      ]
-    },
-    ...
-  ]
-*/
-var ObserverSet = Ember._ObserverSet = function() {
-  this.clear();
-};
-
-ObserverSet.prototype.add = function(sender, keyName, eventName) {
-  var observerSet = this.observerSet,
-      observers = this.observers,
-      senderGuid = guidFor(sender),
-      keySet = observerSet[senderGuid],
-      index;
-
-  if (!keySet) {
-    observerSet[senderGuid] = keySet = {};
-  }
-  index = keySet[keyName];
-  if (index === undefined) {
-    index = observers.push({
-      sender: sender,
-      keyName: keyName,
-      eventName: eventName,
-      listeners: []
-    }) - 1;
-    keySet[keyName] = index;
-  }
-  return observers[index].listeners;
-};
-
-ObserverSet.prototype.flush = function() {
-  var observers = this.observers, i, len, observer, sender;
-  this.clear();
-  for (i=0, len=observers.length; i < len; ++i) {
-    observer = observers[i];
-    sender = observer.sender;
-    if (sender.isDestroying || sender.isDestroyed) { continue; }
-    sendEvent(sender, observer.eventName, [sender, observer.keyName], observer.listeners);
-  }
-};
-
-ObserverSet.prototype.clear = function() {
-  this.observerSet = {};
-  this.observers = [];
-};
-})();
-
-
-
-(function() {
-var META_KEY = Ember.META_KEY,
-    guidFor = Ember.guidFor,
-    tryFinally = Ember.tryFinally,
-    sendEvent = Ember.sendEvent,
-    listenersUnion = Ember.listenersUnion,
-    listenersDiff = Ember.listenersDiff,
-    ObserverSet = Ember._ObserverSet,
-    beforeObserverSet = new ObserverSet(),
-    observerSet = new ObserverSet(),
-    deferred = 0;
-
-// ..........................................................
-// PROPERTY CHANGES
-//
-
-/**
-  This function is called just before an object property is about to change.
-  It will notify any before observers and prepare caches among other things.
-
-  Normally you will not need to call this method directly but if for some
-  reason you can't directly watch a property you can invoke this method
-  manually along with `Ember.propertyDidChange()` which you should call just
-  after the property value changes.
-
-  @method propertyWillChange
-  @for Ember
-  @param {Object} obj The object with the property that will change
-  @param {String} keyName The property key (or path) that will change.
-  @return {void}
-*/
-function propertyWillChange(obj, keyName) {
-  var m = obj[META_KEY],
-      watching = (m && m.watching[keyName] > 0) || keyName === 'length',
-      proto = m && m.proto,
-      desc = m && m.descs[keyName];
-
-  if (!watching) { return; }
-  if (proto === obj) { return; }
-  if (desc && desc.willChange) { desc.willChange(obj, keyName); }
-  dependentKeysWillChange(obj, keyName, m);
-  chainsWillChange(obj, keyName, m);
-  notifyBeforeObservers(obj, keyName);
-}
-Ember.propertyWillChange = propertyWillChange;
-
-/**
-  This function is called just after an object property has changed.
-  It will notify any observers and clear caches among other things.
-
-  Normally you will not need to call this method directly but if for some
-  reason you can't directly watch a property you can invoke this method
-  manually along with `Ember.propertyWillChange()` which you should call just
-  before the property value changes.
-
-  @method propertyDidChange
-  @for Ember
-  @param {Object} obj The object with the property that will change
-  @param {String} keyName The property key (or path) that will change.
-  @return {void}
-*/
-function propertyDidChange(obj, keyName) {
-  var m = obj[META_KEY],
-      watching = (m && m.watching[keyName] > 0) || keyName === 'length',
-      proto = m && m.proto,
-      desc = m && m.descs[keyName];
-
-  if (proto === obj) { return; }
-
-  // shouldn't this mean that we're watching this key?
-  if (desc && desc.didChange) { desc.didChange(obj, keyName); }
-  if (!watching && keyName !== 'length') { return; }
-
-  dependentKeysDidChange(obj, keyName, m);
-  chainsDidChange(obj, keyName, m, false);
-  notifyObservers(obj, keyName);
-}
-Ember.propertyDidChange = propertyDidChange;
-
-var WILL_SEEN, DID_SEEN;
-
-// called whenever a property is about to change to clear the cache of any dependent keys (and notify those properties of changes, etc...)
-function dependentKeysWillChange(obj, depKey, meta) {
-  if (obj.isDestroying) { return; }
-
-  var seen = WILL_SEEN, top = !seen;
-  if (top) { seen = WILL_SEEN = {}; }
-  iterDeps(propertyWillChange, obj, depKey, seen, meta);
-  if (top) { WILL_SEEN = null; }
-}
-
-// called whenever a property has just changed to update dependent keys
-function dependentKeysDidChange(obj, depKey, meta) {
-  if (obj.isDestroying) { return; }
-
-  var seen = DID_SEEN, top = !seen;
-  if (top) { seen = DID_SEEN = {}; }
-  iterDeps(propertyDidChange, obj, depKey, seen, meta);
-  if (top) { DID_SEEN = null; }
-}
-
-function iterDeps(method, obj, depKey, seen, meta) {
-  var guid = guidFor(obj);
-  if (!seen[guid]) seen[guid] = {};
-  if (seen[guid][depKey]) return;
-  seen[guid][depKey] = true;
-
-  var deps = meta.deps;
-  deps = deps && deps[depKey];
-  if (deps) {
-    for(var key in deps) {
-      var desc = meta.descs[key];
-      if (desc && desc._suspended === obj) continue;
-      method(obj, key);
-    }
-  }
-}
-
-function chainsWillChange(obj, keyName, m) {
-  if (!(m.hasOwnProperty('chainWatchers') &&
-        m.chainWatchers[keyName])) {
-    return;
-  }
-
-  var nodes = m.chainWatchers[keyName],
-      events = [],
-      i, l;
-
-  for(i = 0, l = nodes.length; i < l; i++) {
-    nodes[i].willChange(events);
-  }
-
-  for (i = 0, l = events.length; i < l; i += 2) {
-    propertyWillChange(events[i], events[i+1]);
-  }
-}
-
-function chainsDidChange(obj, keyName, m, suppressEvents) {
-  if (!(m && m.hasOwnProperty('chainWatchers') &&
-        m.chainWatchers[keyName])) {
-    return;
-  }
-
-  var nodes = m.chainWatchers[keyName],
-      events = suppressEvents ? null : [],
-      i, l;
-
-  for(i = 0, l = nodes.length; i < l; i++) {
-    nodes[i].didChange(events);
-  }
-
-  if (suppressEvents) {
-    return;
-  }
-
-  for (i = 0, l = events.length; i < l; i += 2) {
-    propertyDidChange(events[i], events[i+1]);
-  }
-}
-
-Ember.overrideChains = function(obj, keyName, m) {
-  chainsDidChange(obj, keyName, m, true);
-};
-
-/**
-  @method beginPropertyChanges
-  @chainable
-  @private
-*/
-function beginPropertyChanges() {
-  deferred++;
-}
-
-Ember.beginPropertyChanges = beginPropertyChanges;
-
-/**
-  @method endPropertyChanges
-  @private
-*/
-function endPropertyChanges() {
-  deferred--;
-  if (deferred<=0) {
-    beforeObserverSet.clear();
-    observerSet.flush();
-  }
-}
-
-Ember.endPropertyChanges = endPropertyChanges;
-
-/**
-  Make a series of property changes together in an
-  exception-safe way.
-
-  ```javascript
-  Ember.changeProperties(function() {
-    obj1.set('foo', mayBlowUpWhenSet);
-    obj2.set('bar', baz);
-  });
-  ```
-
-  @method changeProperties
-  @param {Function} callback
-  @param [binding]
-*/
-Ember.changeProperties = function(cb, binding) {
-  beginPropertyChanges();
-  tryFinally(cb, endPropertyChanges, binding);
-};
-
-function notifyBeforeObservers(obj, keyName) {
-  if (obj.isDestroying) { return; }
-
-  var eventName = keyName + ':before', listeners, diff;
-  if (deferred) {
-    listeners = beforeObserverSet.add(obj, keyName, eventName);
-    diff = listenersDiff(obj, eventName, listeners);
-    sendEvent(obj, eventName, [obj, keyName], diff);
-  } else {
-    sendEvent(obj, eventName, [obj, keyName]);
-  }
-}
-
-function notifyObservers(obj, keyName) {
-  if (obj.isDestroying) { return; }
-
-  var eventName = keyName + ':change', listeners;
-  if (deferred) {
-    listeners = observerSet.add(obj, keyName, eventName);
-    listenersUnion(obj, eventName, listeners);
-  } else {
-    sendEvent(obj, eventName, [obj, keyName]);
-  }
-}
-
-})();
-
-
-
-(function() {
-// META_KEY
-// _getPath
-// propertyWillChange, propertyDidChange
-
-var META_KEY = Ember.META_KEY,
-    MANDATORY_SETTER = Ember.ENV.MANDATORY_SETTER,
-    IS_GLOBAL = /^([A-Z$]|([0-9][A-Z$]))/,
-    getPath = Ember._getPath;
-
-/**
-  Sets the value of a property on an object, respecting computed properties
-  and notifying observers and other listeners of the change. If the
-  property is not defined but the object implements the `setUnknownProperty`
-  method then that will be invoked as well.
-
-  @method set
-  @for Ember
-  @param {Object} obj The object to modify.
-  @param {String} keyName The property key to set
-  @param {Object} value The value to set
-  @return {Object} the passed value.
-*/
-var set = function set(obj, keyName, value, tolerant) {
-  if (typeof obj === 'string') {
-    Ember.assert("Path '" + obj + "' must be global if no obj is given.", IS_GLOBAL.test(obj));
-    value = keyName;
-    keyName = obj;
-    obj = null;
-  }
-
-  Ember.assert("Cannot call set with "+ keyName +" key.", !!keyName);
-
-  if (!obj || keyName.indexOf('.') !== -1) {
-    return setPath(obj, keyName, value, tolerant);
-  }
-
-  Ember.assert("You need to provide an object and key to `set`.", !!obj && keyName !== undefined);
-  Ember.assert('calling set on destroyed object', !obj.isDestroyed);
-
-  var meta = obj[META_KEY], desc = meta && meta.descs[keyName],
-      isUnknown, currentValue;
-  if (desc) {
-    desc.set(obj, keyName, value);
-  } else {
-    isUnknown = 'object' === typeof obj && !(keyName in obj);
-
-    // setUnknownProperty is called if `obj` is an object,
-    // the property does not already exist, and the
-    // `setUnknownProperty` method exists on the object
-    if (isUnknown && 'function' === typeof obj.setUnknownProperty) {
-      obj.setUnknownProperty(keyName, value);
-    } else if (meta && meta.watching[keyName] > 0) {
-      if (MANDATORY_SETTER) {
-        currentValue = meta.values[keyName];
-      } else {
-        currentValue = obj[keyName];
-      }
-      // only trigger a change if the value has changed
-      if (value !== currentValue) {
-        Ember.propertyWillChange(obj, keyName);
-        if (MANDATORY_SETTER) {
-          if ((currentValue === undefined && !(keyName in obj)) || !obj.propertyIsEnumerable(keyName)) {
-            Ember.defineProperty(obj, keyName, null, value); // setup mandatory setter
-          } else {
-            meta.values[keyName] = value;
-          }
-        } else {
-          obj[keyName] = value;
-        }
-        Ember.propertyDidChange(obj, keyName);
-      }
-    } else {
-      obj[keyName] = value;
-    }
-  }
-  return value;
-};
-
-// Currently used only by Ember Data tests
-if (Ember.config.overrideAccessors) {
-  Ember.set = set;
-  Ember.config.overrideAccessors();
-  set = Ember.set;
-}
-
-function setPath(root, path, value, tolerant) {
-  var keyName;
-
-  // get the last part of the path
-  keyName = path.slice(path.lastIndexOf('.') + 1);
-
-  // get the first part of the part
-  path    = (path === keyName) ? keyName : path.slice(0, path.length-(keyName.length+1));
-
-  // unless the path is this, look up the first part to
-  // get the root
-  if (path !== 'this') {
-    root = getPath(root, path);
-  }
-
-  if (!keyName || keyName.length === 0) {
-    throw new Ember.Error('Property set failed: You passed an empty path');
-  }
-
-  if (!root) {
-    if (tolerant) { return; }
-    else { throw new Ember.Error('Property set failed: object in path "'+path+'" could not be found or was destroyed.'); }
-  }
-
-  return set(root, keyName, value);
-}
-
-Ember.set = set;
-
-/**
-  Error-tolerant form of `Ember.set`. Will not blow up if any part of the
-  chain is `undefined`, `null`, or destroyed.
-
-  This is primarily used when syncing bindings, which may try to update after
-  an object has been destroyed.
-
-  @method trySet
-  @for Ember
-  @param {Object} obj The object to modify.
-  @param {String} path The property path to set
-  @param {Object} value The value to set
-*/
-Ember.trySet = function(root, path, value) {
-  return set(root, path, value, true);
-};
-
-})();
-
-
-
-(

<TRUNCATED>

[08/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/styles/bootstrap.css
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/styles/bootstrap.css b/contrib/views/slider/src/main/resources/ui/vendor/styles/bootstrap.css
deleted file mode 100644
index 5c6f23d..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/styles/bootstrap.css
+++ /dev/null
@@ -1,5785 +0,0 @@
-/*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-/*! normalize.css v3.0.0 | MIT License | git.io/normalize */
-html {
-    font-family: sans-serif;
-    -webkit-text-size-adjust: 100%;
-    -ms-text-size-adjust: 100%;
-}
-body {
-    margin: 0;
-}
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-nav,
-section,
-summary {
-    display: block;
-}
-audio,
-canvas,
-progress,
-video {
-    display: inline-block;
-    vertical-align: baseline;
-}
-audio:not([controls]) {
-    display: none;
-    height: 0;
-}
-[hidden],
-template {
-    display: none;
-}
-a {
-    background: transparent;
-}
-a:active,
-a:hover {
-    outline: 0;
-}
-abbr[title] {
-    border-bottom: 1px dotted;
-}
-b,
-strong {
-    font-weight: bold;
-}
-dfn {
-    font-style: italic;
-}
-h1 {
-    margin: .67em 0;
-    font-size: 2em;
-}
-mark {
-    color: #000;
-    background: #ff0;
-}
-small {
-    font-size: 80%;
-}
-sub,
-sup {
-    position: relative;
-    font-size: 75%;
-    line-height: 0;
-    vertical-align: baseline;
-}
-sup {
-    top: -.5em;
-}
-sub {
-    bottom: -.25em;
-}
-img {
-    border: 0;
-}
-svg:not(:root) {
-    overflow: hidden;
-}
-figure {
-    margin: 1em 40px;
-}
-hr {
-    height: 0;
-    -moz-box-sizing: content-box;
-    box-sizing: content-box;
-}
-pre {
-    overflow: auto;
-}
-code,
-kbd,
-pre,
-samp {
-    font-family: monospace, monospace;
-    font-size: 1em;
-}
-button,
-input,
-optgroup,
-select,
-textarea {
-    margin: 0;
-    font: inherit;
-    color: inherit;
-}
-button {
-    overflow: visible;
-}
-button,
-select {
-    text-transform: none;
-}
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
-    -webkit-appearance: button;
-    cursor: pointer;
-}
-button[disabled],
-html input[disabled] {
-    cursor: default;
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-    padding: 0;
-    border: 0;
-}
-input {
-    line-height: normal;
-}
-input[type="checkbox"],
-input[type="radio"] {
-    box-sizing: border-box;
-    padding: 0;
-}
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
-    height: auto;
-}
-input[type="search"] {
-    -webkit-box-sizing: content-box;
-    -moz-box-sizing: content-box;
-    box-sizing: content-box;
-    -webkit-appearance: textfield;
-}
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
-    -webkit-appearance: none;
-}
-fieldset {
-    padding: .35em .625em .75em;
-    margin: 0 2px;
-    border: 1px solid #c0c0c0;
-}
-legend {
-    padding: 0;
-    border: 0;
-}
-textarea {
-    overflow: auto;
-}
-optgroup {
-    font-weight: bold;
-}
-table {
-    border-spacing: 0;
-    border-collapse: collapse;
-}
-td,
-th {
-    padding: 0;
-}
-@media print {
-    * {
-        color: #000 !important;
-        text-shadow: none !important;
-        background: transparent !important;
-        box-shadow: none !important;
-    }
-    a,
-    a:visited {
-        text-decoration: underline;
-    }
-    a[href]:after {
-        content: " (" attr(href) ")";
-    }
-    abbr[title]:after {
-        content: " (" attr(title) ")";
-    }
-    a[href^="javascript:"]:after,
-    a[href^="#"]:after {
-        content: "";
-    }
-    pre,
-    blockquote {
-        border: 1px solid #999;
-
-        page-break-inside: avoid;
-    }
-    thead {
-        display: table-header-group;
-    }
-    tr,
-    img {
-        page-break-inside: avoid;
-    }
-    img {
-        max-width: 100% !important;
-    }
-    p,
-    h2,
-    h3 {
-        orphans: 3;
-        widows: 3;
-    }
-    h2,
-    h3 {
-        page-break-after: avoid;
-    }
-    select {
-        background: #fff !important;
-    }
-    .navbar {
-        display: none;
-    }
-    .table td,
-    .table th {
-        background-color: #fff !important;
-    }
-    .btn > .caret,
-    .dropup > .btn > .caret {
-        border-top-color: #000 !important;
-    }
-    .label {
-        border: 1px solid #000;
-    }
-    .table {
-        border-collapse: collapse !important;
-    }
-    .table-bordered th,
-    .table-bordered td {
-        border: 1px solid #ddd !important;
-    }
-}
-* {
-    -webkit-box-sizing: border-box;
-    -moz-box-sizing: border-box;
-    box-sizing: border-box;
-}
-*:before,
-*:after {
-    -webkit-box-sizing: border-box;
-    -moz-box-sizing: border-box;
-    box-sizing: border-box;
-}
-html {
-    font-size: 62.5%;
-
-    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-}
-body {
-    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-    font-size: 14px;
-    line-height: 1.42857143;
-    color: #333;
-    background-color: #fff;
-}
-input,
-button,
-select,
-textarea {
-    font-family: inherit;
-    font-size: inherit;
-    line-height: inherit;
-}
-a {
-    color: #428bca;
-    text-decoration: none;
-}
-a:hover,
-a:focus {
-    color: #2a6496;
-    text-decoration: underline;
-}
-a:focus {
-    outline: thin dotted;
-    outline: 5px auto -webkit-focus-ring-color;
-    outline-offset: -2px;
-}
-figure {
-    margin: 0;
-}
-img {
-    vertical-align: middle;
-}
-.img-responsive,
-.thumbnail > img,
-.thumbnail a > img,
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
-    display: block;
-    max-width: 100%;
-    height: auto;
-}
-.img-rounded {
-    border-radius: 6px;
-}
-.img-thumbnail {
-    display: inline-block;
-    max-width: 100%;
-    height: auto;
-    padding: 4px;
-    line-height: 1.42857143;
-    background-color: #fff;
-    border: 1px solid #ddd;
-    border-radius: 4px;
-    -webkit-transition: all .2s ease-in-out;
-    transition: all .2s ease-in-out;
-}
-.img-circle {
-    border-radius: 50%;
-}
-hr {
-    margin-top: 20px;
-    margin-bottom: 20px;
-    border: 0;
-    border-top: 1px solid #eee;
-}
-.sr-only {
-    position: absolute;
-    width: 1px;
-    height: 1px;
-    padding: 0;
-    margin: -1px;
-    overflow: hidden;
-    clip: rect(0, 0, 0, 0);
-    border: 0;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-.h1,
-.h2,
-.h3,
-.h4,
-.h5,
-.h6 {
-    font-family: inherit;
-    font-weight: 500;
-    line-height: 1.1;
-    color: inherit;
-}
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small,
-.h1 small,
-.h2 small,
-.h3 small,
-.h4 small,
-.h5 small,
-.h6 small,
-h1 .small,
-h2 .small,
-h3 .small,
-h4 .small,
-h5 .small,
-h6 .small,
-.h1 .small,
-.h2 .small,
-.h3 .small,
-.h4 .small,
-.h5 .small,
-.h6 .small {
-    font-weight: normal;
-    line-height: 1;
-    color: #999;
-}
-h1,
-.h1,
-h2,
-.h2,
-h3,
-.h3 {
-    margin-top: 20px;
-    margin-bottom: 10px;
-}
-h1 small,
-.h1 small,
-h2 small,
-.h2 small,
-h3 small,
-.h3 small,
-h1 .small,
-.h1 .small,
-h2 .small,
-.h2 .small,
-h3 .small,
-.h3 .small {
-    font-size: 65%;
-}
-h4,
-.h4,
-h5,
-.h5,
-h6,
-.h6 {
-    margin-top: 10px;
-    margin-bottom: 10px;
-}
-h4 small,
-.h4 small,
-h5 small,
-.h5 small,
-h6 small,
-.h6 small,
-h4 .small,
-.h4 .small,
-h5 .small,
-.h5 .small,
-h6 .small,
-.h6 .small {
-    font-size: 75%;
-}
-h1,
-.h1 {
-    font-size: 36px;
-}
-h2,
-.h2 {
-    font-size: 30px;
-}
-h3,
-.h3 {
-    font-size: 24px;
-}
-h4,
-.h4 {
-    font-size: 18px;
-}
-h5,
-.h5 {
-    font-size: 14px;
-}
-h6,
-.h6 {
-    font-size: 12px;
-}
-p {
-    margin: 0 0 10px;
-}
-.lead {
-    margin-bottom: 20px;
-    font-size: 16px;
-    font-weight: 200;
-    line-height: 1.4;
-}
-@media (min-width: 768px) {
-    .lead {
-        font-size: 21px;
-    }
-}
-small,
-.small {
-    font-size: 85%;
-}
-cite {
-    font-style: normal;
-}
-.text-left {
-    text-align: left;
-}
-.text-right {
-    text-align: right;
-}
-.text-center {
-    text-align: center;
-}
-.text-justify {
-    text-align: justify;
-}
-.text-muted {
-    color: #999;
-}
-.text-primary {
-    color: #428bca;
-}
-a.text-primary:hover {
-    color: #3071a9;
-}
-.text-success {
-    color: #3c763d;
-}
-a.text-success:hover {
-    color: #2b542c;
-}
-.text-info {
-    color: #31708f;
-}
-a.text-info:hover {
-    color: #245269;
-}
-.text-warning {
-    color: #8a6d3b;
-}
-a.text-warning:hover {
-    color: #66512c;
-}
-.text-danger {
-    color: #a94442;
-}
-a.text-danger:hover {
-    color: #843534;
-}
-.bg-primary {
-    color: #fff;
-    background-color: #428bca;
-}
-a.bg-primary:hover {
-    background-color: #3071a9;
-}
-.bg-success {
-    background-color: #dff0d8;
-}
-a.bg-success:hover {
-    background-color: #c1e2b3;
-}
-.bg-info {
-    background-color: #d9edf7;
-}
-a.bg-info:hover {
-    background-color: #afd9ee;
-}
-.bg-warning {
-    background-color: #fcf8e3;
-}
-a.bg-warning:hover {
-    background-color: #f7ecb5;
-}
-.bg-danger {
-    background-color: #f2dede;
-}
-a.bg-danger:hover {
-    background-color: #e4b9b9;
-}
-.page-header {
-    padding-bottom: 9px;
-    margin: 40px 0 20px;
-    border-bottom: 1px solid #eee;
-}
-ul,
-ol {
-    margin-top: 0;
-    margin-bottom: 10px;
-}
-ul ul,
-ol ul,
-ul ol,
-ol ol {
-    margin-bottom: 0;
-}
-.list-unstyled {
-    padding-left: 0;
-    list-style: none;
-}
-.list-inline {
-    padding-left: 0;
-    margin-left: -5px;
-    list-style: none;
-}
-.list-inline > li {
-    display: inline-block;
-    padding-right: 5px;
-    padding-left: 5px;
-}
-dl {
-    margin-top: 0;
-    margin-bottom: 20px;
-}
-dt,
-dd {
-    line-height: 1.42857143;
-}
-dt {
-    font-weight: bold;
-}
-dd {
-    margin-left: 0;
-}
-@media (min-width: 768px) {
-    .dl-horizontal dt {
-        float: left;
-        width: 160px;
-        overflow: hidden;
-        clear: left;
-        text-align: right;
-        text-overflow: ellipsis;
-        white-space: nowrap;
-    }
-    .dl-horizontal dd {
-        margin-left: 180px;
-    }
-}
-abbr[title],
-abbr[data-original-title] {
-    cursor: help;
-    border-bottom: 1px dotted #999;
-}
-.initialism {
-    font-size: 90%;
-    text-transform: uppercase;
-}
-blockquote {
-    padding: 10px 20px;
-    margin: 0 0 20px;
-    font-size: 17.5px;
-    border-left: 5px solid #eee;
-}
-blockquote p:last-child,
-blockquote ul:last-child,
-blockquote ol:last-child {
-    margin-bottom: 0;
-}
-blockquote footer,
-blockquote small,
-blockquote .small {
-    display: block;
-    font-size: 80%;
-    line-height: 1.42857143;
-    color: #999;
-}
-blockquote footer:before,
-blockquote small:before,
-blockquote .small:before {
-    content: '\2014 \00A0';
-}
-.blockquote-reverse,
-blockquote.pull-right {
-    padding-right: 15px;
-    padding-left: 0;
-    text-align: right;
-    border-right: 5px solid #eee;
-    border-left: 0;
-}
-.blockquote-reverse footer:before,
-blockquote.pull-right footer:before,
-.blockquote-reverse small:before,
-blockquote.pull-right small:before,
-.blockquote-reverse .small:before,
-blockquote.pull-right .small:before {
-    content: '';
-}
-.blockquote-reverse footer:after,
-blockquote.pull-right footer:after,
-.blockquote-reverse small:after,
-blockquote.pull-right small:after,
-.blockquote-reverse .small:after,
-blockquote.pull-right .small:after {
-    content: '\00A0 \2014';
-}
-blockquote:before,
-blockquote:after {
-    content: "";
-}
-address {
-    margin-bottom: 20px;
-    font-style: normal;
-    line-height: 1.42857143;
-}
-code,
-kbd,
-pre,
-samp {
-    font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
-}
-code {
-    padding: 2px 4px;
-    font-size: 90%;
-    color: #c7254e;
-    white-space: nowrap;
-    background-color: #f9f2f4;
-    border-radius: 4px;
-}
-kbd {
-    padding: 2px 4px;
-    font-size: 90%;
-    color: #fff;
-    background-color: #333;
-    border-radius: 3px;
-    box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
-}
-pre {
-    display: block;
-    padding: 9.5px;
-    margin: 0 0 10px;
-    font-size: 13px;
-    line-height: 1.42857143;
-    color: #333;
-    word-break: break-all;
-    word-wrap: break-word;
-    background-color: #f5f5f5;
-    border: 1px solid #ccc;
-    border-radius: 4px;
-}
-pre code {
-    padding: 0;
-    font-size: inherit;
-    color: inherit;
-    white-space: pre-wrap;
-    background-color: transparent;
-    border-radius: 0;
-}
-.pre-scrollable {
-    max-height: 340px;
-    overflow-y: scroll;
-}
-.container {
-    padding-right: 15px;
-    padding-left: 15px;
-    margin-right: auto;
-    margin-left: auto;
-}
-@media (min-width: 768px) {
-    .container {
-        width: 750px;
-    }
-}
-@media (min-width: 992px) {
-    .container {
-        width: 970px;
-    }
-}
-@media (min-width: 1200px) {
-    .container {
-        width: 1170px;
-    }
-}
-.container-fluid {
-    padding-right: 15px;
-    padding-left: 15px;
-    margin-right: auto;
-    margin-left: auto;
-}
-.row {
-    margin-right: -15px;
-    margin-left: -15px;
-}
-.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
-    position: relative;
-    min-height: 1px;
-    padding-right: 15px;
-    padding-left: 15px;
-}
-.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
-    float: left;
-}
-.col-xs-12 {
-    width: 100%;
-}
-.col-xs-11 {
-    width: 91.66666667%;
-}
-.col-xs-10 {
-    width: 83.33333333%;
-}
-.col-xs-9 {
-    width: 75%;
-}
-.col-xs-8 {
-    width: 66.66666667%;
-}
-.col-xs-7 {
-    width: 58.33333333%;
-}
-.col-xs-6 {
-    width: 50%;
-}
-.col-xs-5 {
-    width: 41.66666667%;
-}
-.col-xs-4 {
-    width: 33.33333333%;
-}
-.col-xs-3 {
-    width: 25%;
-}
-.col-xs-2 {
-    width: 16.66666667%;
-}
-.col-xs-1 {
-    width: 8.33333333%;
-}
-.col-xs-pull-12 {
-    right: 100%;
-}
-.col-xs-pull-11 {
-    right: 91.66666667%;
-}
-.col-xs-pull-10 {
-    right: 83.33333333%;
-}
-.col-xs-pull-9 {
-    right: 75%;
-}
-.col-xs-pull-8 {
-    right: 66.66666667%;
-}
-.col-xs-pull-7 {
-    right: 58.33333333%;
-}
-.col-xs-pull-6 {
-    right: 50%;
-}
-.col-xs-pull-5 {
-    right: 41.66666667%;
-}
-.col-xs-pull-4 {
-    right: 33.33333333%;
-}
-.col-xs-pull-3 {
-    right: 25%;
-}
-.col-xs-pull-2 {
-    right: 16.66666667%;
-}
-.col-xs-pull-1 {
-    right: 8.33333333%;
-}
-.col-xs-pull-0 {
-    right: 0;
-}
-.col-xs-push-12 {
-    left: 100%;
-}
-.col-xs-push-11 {
-    left: 91.66666667%;
-}
-.col-xs-push-10 {
-    left: 83.33333333%;
-}
-.col-xs-push-9 {
-    left: 75%;
-}
-.col-xs-push-8 {
-    left: 66.66666667%;
-}
-.col-xs-push-7 {
-    left: 58.33333333%;
-}
-.col-xs-push-6 {
-    left: 50%;
-}
-.col-xs-push-5 {
-    left: 41.66666667%;
-}
-.col-xs-push-4 {
-    left: 33.33333333%;
-}
-.col-xs-push-3 {
-    left: 25%;
-}
-.col-xs-push-2 {
-    left: 16.66666667%;
-}
-.col-xs-push-1 {
-    left: 8.33333333%;
-}
-.col-xs-push-0 {
-    left: 0;
-}
-.col-xs-offset-12 {
-    margin-left: 100%;
-}
-.col-xs-offset-11 {
-    margin-left: 91.66666667%;
-}
-.col-xs-offset-10 {
-    margin-left: 83.33333333%;
-}
-.col-xs-offset-9 {
-    margin-left: 75%;
-}
-.col-xs-offset-8 {
-    margin-left: 66.66666667%;
-}
-.col-xs-offset-7 {
-    margin-left: 58.33333333%;
-}
-.col-xs-offset-6 {
-    margin-left: 50%;
-}
-.col-xs-offset-5 {
-    margin-left: 41.66666667%;
-}
-.col-xs-offset-4 {
-    margin-left: 33.33333333%;
-}
-.col-xs-offset-3 {
-    margin-left: 25%;
-}
-.col-xs-offset-2 {
-    margin-left: 16.66666667%;
-}
-.col-xs-offset-1 {
-    margin-left: 8.33333333%;
-}
-.col-xs-offset-0 {
-    margin-left: 0;
-}
-@media (min-width: 768px) {
-    .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
-        float: left;
-    }
-    .col-sm-12 {
-        width: 100%;
-    }
-    .col-sm-11 {
-        width: 91.66666667%;
-    }
-    .col-sm-10 {
-        width: 83.33333333%;
-    }
-    .col-sm-9 {
-        width: 75%;
-    }
-    .col-sm-8 {
-        width: 66.66666667%;
-    }
-    .col-sm-7 {
-        width: 58.33333333%;
-    }
-    .col-sm-6 {
-        width: 50%;
-    }
-    .col-sm-5 {
-        width: 41.66666667%;
-    }
-    .col-sm-4 {
-        width: 33.33333333%;
-    }
-    .col-sm-3 {
-        width: 25%;
-    }
-    .col-sm-2 {
-        width: 16.66666667%;
-    }
-    .col-sm-1 {
-        width: 8.33333333%;
-    }
-    .col-sm-pull-12 {
-        right: 100%;
-    }
-    .col-sm-pull-11 {
-        right: 91.66666667%;
-    }
-    .col-sm-pull-10 {
-        right: 83.33333333%;
-    }
-    .col-sm-pull-9 {
-        right: 75%;
-    }
-    .col-sm-pull-8 {
-        right: 66.66666667%;
-    }
-    .col-sm-pull-7 {
-        right: 58.33333333%;
-    }
-    .col-sm-pull-6 {
-        right: 50%;
-    }
-    .col-sm-pull-5 {
-        right: 41.66666667%;
-    }
-    .col-sm-pull-4 {
-        right: 33.33333333%;
-    }
-    .col-sm-pull-3 {
-        right: 25%;
-    }
-    .col-sm-pull-2 {
-        right: 16.66666667%;
-    }
-    .col-sm-pull-1 {
-        right: 8.33333333%;
-    }
-    .col-sm-pull-0 {
-        right: 0;
-    }
-    .col-sm-push-12 {
-        left: 100%;
-    }
-    .col-sm-push-11 {
-        left: 91.66666667%;
-    }
-    .col-sm-push-10 {
-        left: 83.33333333%;
-    }
-    .col-sm-push-9 {
-        left: 75%;
-    }
-    .col-sm-push-8 {
-        left: 66.66666667%;
-    }
-    .col-sm-push-7 {
-        left: 58.33333333%;
-    }
-    .col-sm-push-6 {
-        left: 50%;
-    }
-    .col-sm-push-5 {
-        left: 41.66666667%;
-    }
-    .col-sm-push-4 {
-        left: 33.33333333%;
-    }
-    .col-sm-push-3 {
-        left: 25%;
-    }
-    .col-sm-push-2 {
-        left: 16.66666667%;
-    }
-    .col-sm-push-1 {
-        left: 8.33333333%;
-    }
-    .col-sm-push-0 {
-        left: 0;
-    }
-    .col-sm-offset-12 {
-        margin-left: 100%;
-    }
-    .col-sm-offset-11 {
-        margin-left: 91.66666667%;
-    }
-    .col-sm-offset-10 {
-        margin-left: 83.33333333%;
-    }
-    .col-sm-offset-9 {
-        margin-left: 75%;
-    }
-    .col-sm-offset-8 {
-        margin-left: 66.66666667%;
-    }
-    .col-sm-offset-7 {
-        margin-left: 58.33333333%;
-    }
-    .col-sm-offset-6 {
-        margin-left: 50%;
-    }
-    .col-sm-offset-5 {
-        margin-left: 41.66666667%;
-    }
-    .col-sm-offset-4 {
-        margin-left: 33.33333333%;
-    }
-    .col-sm-offset-3 {
-        margin-left: 25%;
-    }
-    .col-sm-offset-2 {
-        margin-left: 16.66666667%;
-    }
-    .col-sm-offset-1 {
-        margin-left: 8.33333333%;
-    }
-    .col-sm-offset-0 {
-        margin-left: 0;
-    }
-}
-@media (min-width: 992px) {
-    .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
-        float: left;
-    }
-    .col-md-12 {
-        width: 100%;
-    }
-    .col-md-11 {
-        width: 91.66666667%;
-    }
-    .col-md-10 {
-        width: 83.33333333%;
-    }
-    .col-md-9 {
-        width: 75%;
-    }
-    .col-md-8 {
-        width: 66.66666667%;
-    }
-    .col-md-7 {
-        width: 58.33333333%;
-    }
-    .col-md-6 {
-        width: 50%;
-    }
-    .col-md-5 {
-        width: 41.66666667%;
-    }
-    .col-md-4 {
-        width: 33.33333333%;
-    }
-    .col-md-3 {
-        width: 25%;
-    }
-    .col-md-2 {
-        width: 16.66666667%;
-    }
-    .col-md-1 {
-        width: 8.33333333%;
-    }
-    .col-md-pull-12 {
-        right: 100%;
-    }
-    .col-md-pull-11 {
-        right: 91.66666667%;
-    }
-    .col-md-pull-10 {
-        right: 83.33333333%;
-    }
-    .col-md-pull-9 {
-        right: 75%;
-    }
-    .col-md-pull-8 {
-        right: 66.66666667%;
-    }
-    .col-md-pull-7 {
-        right: 58.33333333%;
-    }
-    .col-md-pull-6 {
-        right: 50%;
-    }
-    .col-md-pull-5 {
-        right: 41.66666667%;
-    }
-    .col-md-pull-4 {
-        right: 33.33333333%;
-    }
-    .col-md-pull-3 {
-        right: 25%;
-    }
-    .col-md-pull-2 {
-        right: 16.66666667%;
-    }
-    .col-md-pull-1 {
-        right: 8.33333333%;
-    }
-    .col-md-pull-0 {
-        right: 0;
-    }
-    .col-md-push-12 {
-        left: 100%;
-    }
-    .col-md-push-11 {
-        left: 91.66666667%;
-    }
-    .col-md-push-10 {
-        left: 83.33333333%;
-    }
-    .col-md-push-9 {
-        left: 75%;
-    }
-    .col-md-push-8 {
-        left: 66.66666667%;
-    }
-    .col-md-push-7 {
-        left: 58.33333333%;
-    }
-    .col-md-push-6 {
-        left: 50%;
-    }
-    .col-md-push-5 {
-        left: 41.66666667%;
-    }
-    .col-md-push-4 {
-        left: 33.33333333%;
-    }
-    .col-md-push-3 {
-        left: 25%;
-    }
-    .col-md-push-2 {
-        left: 16.66666667%;
-    }
-    .col-md-push-1 {
-        left: 8.33333333%;
-    }
-    .col-md-push-0 {
-        left: 0;
-    }
-    .col-md-offset-12 {
-        margin-left: 100%;
-    }
-    .col-md-offset-11 {
-        margin-left: 91.66666667%;
-    }
-    .col-md-offset-10 {
-        margin-left: 83.33333333%;
-    }
-    .col-md-offset-9 {
-        margin-left: 75%;
-    }
-    .col-md-offset-8 {
-        margin-left: 66.66666667%;
-    }
-    .col-md-offset-7 {
-        margin-left: 58.33333333%;
-    }
-    .col-md-offset-6 {
-        margin-left: 50%;
-    }
-    .col-md-offset-5 {
-        margin-left: 41.66666667%;
-    }
-    .col-md-offset-4 {
-        margin-left: 33.33333333%;
-    }
-    .col-md-offset-3 {
-        margin-left: 25%;
-    }
-    .col-md-offset-2 {
-        margin-left: 16.66666667%;
-    }
-    .col-md-offset-1 {
-        margin-left: 8.33333333%;
-    }
-    .col-md-offset-0 {
-        margin-left: 0;
-    }
-}
-@media (min-width: 1200px) {
-    .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
-        float: left;
-    }
-    .col-lg-12 {
-        width: 100%;
-    }
-    .col-lg-11 {
-        width: 91.66666667%;
-    }
-    .col-lg-10 {
-        width: 83.33333333%;
-    }
-    .col-lg-9 {
-        width: 75%;
-    }
-    .col-lg-8 {
-        width: 66.66666667%;
-    }
-    .col-lg-7 {
-        width: 58.33333333%;
-    }
-    .col-lg-6 {
-        width: 50%;
-    }
-    .col-lg-5 {
-        width: 41.66666667%;
-    }
-    .col-lg-4 {
-        width: 33.33333333%;
-    }
-    .col-lg-3 {
-        width: 25%;
-    }
-    .col-lg-2 {
-        width: 16.66666667%;
-    }
-    .col-lg-1 {
-        width: 8.33333333%;
-    }
-    .col-lg-pull-12 {
-        right: 100%;
-    }
-    .col-lg-pull-11 {
-        right: 91.66666667%;
-    }
-    .col-lg-pull-10 {
-        right: 83.33333333%;
-    }
-    .col-lg-pull-9 {
-        right: 75%;
-    }
-    .col-lg-pull-8 {
-        right: 66.66666667%;
-    }
-    .col-lg-pull-7 {
-        right: 58.33333333%;
-    }
-    .col-lg-pull-6 {
-        right: 50%;
-    }
-    .col-lg-pull-5 {
-        right: 41.66666667%;
-    }
-    .col-lg-pull-4 {
-        right: 33.33333333%;
-    }
-    .col-lg-pull-3 {
-        right: 25%;
-    }
-    .col-lg-pull-2 {
-        right: 16.66666667%;
-    }
-    .col-lg-pull-1 {
-        right: 8.33333333%;
-    }
-    .col-lg-pull-0 {
-        right: 0;
-    }
-    .col-lg-push-12 {
-        left: 100%;
-    }
-    .col-lg-push-11 {
-        left: 91.66666667%;
-    }
-    .col-lg-push-10 {
-        left: 83.33333333%;
-    }
-    .col-lg-push-9 {
-        left: 75%;
-    }
-    .col-lg-push-8 {
-        left: 66.66666667%;
-    }
-    .col-lg-push-7 {
-        left: 58.33333333%;
-    }
-    .col-lg-push-6 {
-        left: 50%;
-    }
-    .col-lg-push-5 {
-        left: 41.66666667%;
-    }
-    .col-lg-push-4 {
-        left: 33.33333333%;
-    }
-    .col-lg-push-3 {
-        left: 25%;
-    }
-    .col-lg-push-2 {
-        left: 16.66666667%;
-    }
-    .col-lg-push-1 {
-        left: 8.33333333%;
-    }
-    .col-lg-push-0 {
-        left: 0;
-    }
-    .col-lg-offset-12 {
-        margin-left: 100%;
-    }
-    .col-lg-offset-11 {
-        margin-left: 91.66666667%;
-    }
-    .col-lg-offset-10 {
-        margin-left: 83.33333333%;
-    }
-    .col-lg-offset-9 {
-        margin-left: 75%;
-    }
-    .col-lg-offset-8 {
-        margin-left: 66.66666667%;
-    }
-    .col-lg-offset-7 {
-        margin-left: 58.33333333%;
-    }
-    .col-lg-offset-6 {
-        margin-left: 50%;
-    }
-    .col-lg-offset-5 {
-        margin-left: 41.66666667%;
-    }
-    .col-lg-offset-4 {
-        margin-left: 33.33333333%;
-    }
-    .col-lg-offset-3 {
-        margin-left: 25%;
-    }
-    .col-lg-offset-2 {
-        margin-left: 16.66666667%;
-    }
-    .col-lg-offset-1 {
-        margin-left: 8.33333333%;
-    }
-    .col-lg-offset-0 {
-        margin-left: 0;
-    }
-}
-table {
-    max-width: 100%;
-    background-color: transparent;
-}
-th {
-    text-align: left;
-}
-.table {
-    width: 100%;
-    margin-bottom: 20px;
-}
-.table > thead > tr > th,
-.table > tbody > tr > th,
-.table > tfoot > tr > th,
-.table > thead > tr > td,
-.table > tbody > tr > td,
-.table > tfoot > tr > td {
-    padding: 8px;
-    line-height: 1.42857143;
-    vertical-align: top;
-    border-top: 1px solid #ddd;
-}
-.table > thead > tr > th {
-    vertical-align: bottom;
-    border-bottom: 2px solid #ddd;
-}
-.table > caption + thead > tr:first-child > th,
-.table > colgroup + thead > tr:first-child > th,
-.table > thead:first-child > tr:first-child > th,
-.table > caption + thead > tr:first-child > td,
-.table > colgroup + thead > tr:first-child > td,
-.table > thead:first-child > tr:first-child > td {
-    border-top: 0;
-}
-.table > tbody + tbody {
-    border-top: 2px solid #ddd;
-}
-.table .table {
-    background-color: #fff;
-}
-.table-condensed > thead > tr > th,
-.table-condensed > tbody > tr > th,
-.table-condensed > tfoot > tr > th,
-.table-condensed > thead > tr > td,
-.table-condensed > tbody > tr > td,
-.table-condensed > tfoot > tr > td {
-    padding: 5px;
-}
-.table-bordered {
-    border: 1px solid #ddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > tbody > tr > th,
-.table-bordered > tfoot > tr > th,
-.table-bordered > thead > tr > td,
-.table-bordered > tbody > tr > td,
-.table-bordered > tfoot > tr > td {
-    border: 1px solid #ddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > thead > tr > td {
-    border-bottom-width: 2px;
-}
-.table-striped > tbody > tr:nth-child(odd) > td,
-.table-striped > tbody > tr:nth-child(odd) > th {
-    background-color: #f9f9f9;
-}
-.table-hover > tbody > tr:hover > td,
-.table-hover > tbody > tr:hover > th {
-    background-color: #f5f5f5;
-}
-table col[class*="col-"] {
-    position: static;
-    display: table-column;
-    float: none;
-}
-table td[class*="col-"],
-table th[class*="col-"] {
-    position: static;
-    display: table-cell;
-    float: none;
-}
-.table > thead > tr > td.active,
-.table > tbody > tr > td.active,
-.table > tfoot > tr > td.active,
-.table > thead > tr > th.active,
-.table > tbody > tr > th.active,
-.table > tfoot > tr > th.active,
-.table > thead > tr.active > td,
-.table > tbody > tr.active > td,
-.table > tfoot > tr.active > td,
-.table > thead > tr.active > th,
-.table > tbody > tr.active > th,
-.table > tfoot > tr.active > th {
-    background-color: #f5f5f5;
-}
-.table-hover > tbody > tr > td.active:hover,
-.table-hover > tbody > tr > th.active:hover,
-.table-hover > tbody > tr.active:hover > td,
-.table-hover > tbody > tr.active:hover > th {
-    background-color: #e8e8e8;
-}
-.table > thead > tr > td.success,
-.table > tbody > tr > td.success,
-.table > tfoot > tr > td.success,
-.table > thead > tr > th.success,
-.table > tbody > tr > th.success,
-.table > tfoot > tr > th.success,
-.table > thead > tr.success > td,
-.table > tbody > tr.success > td,
-.table > tfoot > tr.success > td,
-.table > thead > tr.success > th,
-.table > tbody > tr.success > th,
-.table > tfoot > tr.success > th {
-    background-color: #dff0d8;
-}
-.table-hover > tbody > tr > td.success:hover,
-.table-hover > tbody > tr > th.success:hover,
-.table-hover > tbody > tr.success:hover > td,
-.table-hover > tbody > tr.success:hover > th {
-    background-color: #d0e9c6;
-}
-.table > thead > tr > td.info,
-.table > tbody > tr > td.info,
-.table > tfoot > tr > td.info,
-.table > thead > tr > th.info,
-.table > tbody > tr > th.info,
-.table > tfoot > tr > th.info,
-.table > thead > tr.info > td,
-.table > tbody > tr.info > td,
-.table > tfoot > tr.info > td,
-.table > thead > tr.info > th,
-.table > tbody > tr.info > th,
-.table > tfoot > tr.info > th {
-    background-color: #d9edf7;
-}
-.table-hover > tbody > tr > td.info:hover,
-.table-hover > tbody > tr > th.info:hover,
-.table-hover > tbody > tr.info:hover > td,
-.table-hover > tbody > tr.info:hover > th {
-    background-color: #c4e3f3;
-}
-.table > thead > tr > td.warning,
-.table > tbody > tr > td.warning,
-.table > tfoot > tr > td.warning,
-.table > thead > tr > th.warning,
-.table > tbody > tr > th.warning,
-.table > tfoot > tr > th.warning,
-.table > thead > tr.warning > td,
-.table > tbody > tr.warning > td,
-.table > tfoot > tr.warning > td,
-.table > thead > tr.warning > th,
-.table > tbody > tr.warning > th,
-.table > tfoot > tr.warning > th {
-    background-color: #fcf8e3;
-}
-.table-hover > tbody > tr > td.warning:hover,
-.table-hover > tbody > tr > th.warning:hover,
-.table-hover > tbody > tr.warning:hover > td,
-.table-hover > tbody > tr.warning:hover > th {
-    background-color: #faf2cc;
-}
-.table > thead > tr > td.danger,
-.table > tbody > tr > td.danger,
-.table > tfoot > tr > td.danger,
-.table > thead > tr > th.danger,
-.table > tbody > tr > th.danger,
-.table > tfoot > tr > th.danger,
-.table > thead > tr.danger > td,
-.table > tbody > tr.danger > td,
-.table > tfoot > tr.danger > td,
-.table > thead > tr.danger > th,
-.table > tbody > tr.danger > th,
-.table > tfoot > tr.danger > th {
-    background-color: #f2dede;
-}
-.table-hover > tbody > tr > td.danger:hover,
-.table-hover > tbody > tr > th.danger:hover,
-.table-hover > tbody > tr.danger:hover > td,
-.table-hover > tbody > tr.danger:hover > th {
-    background-color: #ebcccc;
-}
-@media (max-width: 767px) {
-    .table-responsive {
-        width: 100%;
-        margin-bottom: 15px;
-        overflow-x: scroll;
-        overflow-y: hidden;
-        -webkit-overflow-scrolling: touch;
-        -ms-overflow-style: -ms-autohiding-scrollbar;
-        border: 1px solid #ddd;
-    }
-    .table-responsive > .table {
-        margin-bottom: 0;
-    }
-    .table-responsive > .table > thead > tr > th,
-    .table-responsive > .table > tbody > tr > th,
-    .table-responsive > .table > tfoot > tr > th,
-    .table-responsive > .table > thead > tr > td,
-    .table-responsive > .table > tbody > tr > td,
-    .table-responsive > .table > tfoot > tr > td {
-        white-space: nowrap;
-    }
-    .table-responsive > .table-bordered {
-        border: 0;
-    }
-    .table-responsive > .table-bordered > thead > tr > th:first-child,
-    .table-responsive > .table-bordered > tbody > tr > th:first-child,
-    .table-responsive > .table-bordered > tfoot > tr > th:first-child,
-    .table-responsive > .table-bordered > thead > tr > td:first-child,
-    .table-responsive > .table-bordered > tbody > tr > td:first-child,
-    .table-responsive > .table-bordered > tfoot > tr > td:first-child {
-        border-left: 0;
-    }
-    .table-responsive > .table-bordered > thead > tr > th:last-child,
-    .table-responsive > .table-bordered > tbody > tr > th:last-child,
-    .table-responsive > .table-bordered > tfoot > tr > th:last-child,
-    .table-responsive > .table-bordered > thead > tr > td:last-child,
-    .table-responsive > .table-bordered > tbody > tr > td:last-child,
-    .table-responsive > .table-bordered > tfoot > tr > td:last-child {
-        border-right: 0;
-    }
-    .table-responsive > .table-bordered > tbody > tr:last-child > th,
-    .table-responsive > .table-bordered > tfoot > tr:last-child > th,
-    .table-responsive > .table-bordered > tbody > tr:last-child > td,
-    .table-responsive > .table-bordered > tfoot > tr:last-child > td {
-        border-bottom: 0;
-    }
-}
-fieldset {
-    min-width: 0;
-    padding: 0;
-    margin: 0;
-    border: 0;
-}
-legend {
-    display: block;
-    width: 100%;
-    padding: 0;
-    margin-bottom: 20px;
-    font-size: 21px;
-    line-height: inherit;
-    color: #333;
-    border: 0;
-    border-bottom: 1px solid #e5e5e5;
-}
-label {
-    display: inline-block;
-    margin-bottom: 5px;
-    font-weight: bold;
-}
-input[type="search"] {
-    -webkit-box-sizing: border-box;
-    -moz-box-sizing: border-box;
-    box-sizing: border-box;
-}
-input[type="radio"],
-input[type="checkbox"] {
-    margin: 4px 0 0;
-    margin-top: 1px \9;
-    /* IE8-9 */
-    line-height: normal;
-}
-input[type="file"] {
-    display: block;
-}
-input[type="range"] {
-    display: block;
-    width: 100%;
-}
-select[multiple],
-select[size] {
-    height: auto;
-}
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
-    outline: thin dotted;
-    outline: 5px auto -webkit-focus-ring-color;
-    outline-offset: -2px;
-}
-output {
-    display: block;
-    padding-top: 7px;
-    font-size: 14px;
-    line-height: 1.42857143;
-    color: #555;
-}
-.form-control {
-    display: block;
-    width: 100%;
-    height: 34px;
-    padding: 6px 12px;
-    font-size: 14px;
-    line-height: 1.42857143;
-    color: #555;
-    background-color: #fff;
-    background-image: none;
-    border: 1px solid #ccc;
-    border-radius: 4px;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-    -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-    transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-}
-.form-control:focus {
-    border-color: #66afe9;
-    outline: 0;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
-    box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
-}
-.form-control::-moz-placeholder {
-    color: #999;
-    opacity: 1;
-}
-.form-control:-ms-input-placeholder {
-    color: #999;
-}
-.form-control::-webkit-input-placeholder {
-    color: #999;
-}
-.form-control[disabled],
-.form-control[readonly],
-fieldset[disabled] .form-control {
-    cursor: not-allowed;
-    background-color: #eee;
-    opacity: 1;
-}
-textarea.form-control {
-    height: auto;
-}
-input[type="search"] {
-    -webkit-appearance: none;
-}
-input[type="date"] {
-    line-height: 34px;
-}
-.form-group {
-    margin-bottom: 15px;
-}
-.radio,
-.checkbox {
-    display: block;
-    min-height: 20px;
-    padding-left: 20px;
-    margin-top: 10px;
-    margin-bottom: 10px;
-}
-.radio label,
-.checkbox label {
-    display: inline;
-    font-weight: normal;
-    cursor: pointer;
-}
-.radio input[type="radio"],
-.radio-inline input[type="radio"],
-.checkbox input[type="checkbox"],
-.checkbox-inline input[type="checkbox"] {
-    float: left;
-    margin-left: -20px;
-}
-.radio + .radio,
-.checkbox + .checkbox {
-    margin-top: -5px;
-}
-.radio-inline,
-.checkbox-inline {
-    display: inline-block;
-    padding-left: 20px;
-    margin-bottom: 0;
-    font-weight: normal;
-    vertical-align: middle;
-    cursor: pointer;
-}
-.radio-inline + .radio-inline,
-.checkbox-inline + .checkbox-inline {
-    margin-top: 0;
-    margin-left: 10px;
-}
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-.radio[disabled],
-.radio-inline[disabled],
-.checkbox[disabled],
-.checkbox-inline[disabled],
-fieldset[disabled] input[type="radio"],
-fieldset[disabled] input[type="checkbox"],
-fieldset[disabled] .radio,
-fieldset[disabled] .radio-inline,
-fieldset[disabled] .checkbox,
-fieldset[disabled] .checkbox-inline {
-    cursor: not-allowed;
-}
-.input-sm {
-    height: 30px;
-    padding: 5px 10px;
-    font-size: 12px;
-    line-height: 1.5;
-    border-radius: 3px;
-}
-select.input-sm {
-    height: 30px;
-    line-height: 30px;
-}
-textarea.input-sm,
-select[multiple].input-sm {
-    height: auto;
-}
-.input-lg {
-    height: 46px;
-    padding: 10px 16px;
-    font-size: 18px;
-    line-height: 1.33;
-    border-radius: 6px;
-}
-select.input-lg {
-    height: 46px;
-    line-height: 46px;
-}
-textarea.input-lg,
-select[multiple].input-lg {
-    height: auto;
-}
-.has-feedback {
-    position: relative;
-}
-.has-feedback .form-control {
-    padding-right: 42.5px;
-}
-.has-feedback .form-control-feedback {
-    position: absolute;
-    top: 25px;
-    right: 0;
-    display: block;
-    width: 34px;
-    height: 34px;
-    line-height: 34px;
-    text-align: center;
-}
-.has-success .help-block,
-.has-success .control-label,
-.has-success .radio,
-.has-success .checkbox,
-.has-success .radio-inline,
-.has-success .checkbox-inline {
-    color: #3c763d;
-}
-.has-success .form-control {
-    border-color: #3c763d;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-success .form-control:focus {
-    border-color: #2b542c;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
-    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
-}
-.has-success .input-group-addon {
-    color: #3c763d;
-    background-color: #dff0d8;
-    border-color: #3c763d;
-}
-.has-success .form-control-feedback {
-    color: #3c763d;
-}
-.has-warning .help-block,
-.has-warning .control-label,
-.has-warning .radio,
-.has-warning .checkbox,
-.has-warning .radio-inline,
-.has-warning .checkbox-inline {
-    color: #8a6d3b;
-}
-.has-warning .form-control {
-    border-color: #8a6d3b;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-warning .form-control:focus {
-    border-color: #66512c;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
-    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
-}
-.has-warning .input-group-addon {
-    color: #8a6d3b;
-    background-color: #fcf8e3;
-    border-color: #8a6d3b;
-}
-.has-warning .form-control-feedback {
-    color: #8a6d3b;
-}
-.has-error .help-block,
-.has-error .control-label,
-.has-error .radio,
-.has-error .checkbox,
-.has-error .radio-inline,
-.has-error .checkbox-inline {
-    color: #a94442;
-}
-.has-error .form-control {
-    border-color: #a94442;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-error .form-control:focus {
-    border-color: #843534;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
-    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
-}
-.has-error .input-group-addon {
-    color: #a94442;
-    background-color: #f2dede;
-    border-color: #a94442;
-}
-.has-error .form-control-feedback {
-    color: #a94442;
-}
-.form-control-static {
-    margin-bottom: 0;
-}
-.help-block {
-    display: block;
-    margin-top: 5px;
-    margin-bottom: 10px;
-    color: #737373;
-}
-@media (min-width: 768px) {
-    .form-inline .form-group {
-        display: inline-block;
-        margin-bottom: 0;
-        vertical-align: middle;
-    }
-    .form-inline .form-control {
-        display: inline-block;
-        width: auto;
-        vertical-align: middle;
-    }
-    .form-inline .input-group > .form-control {
-        width: 100%;
-    }
-    .form-inline .control-label {
-        margin-bottom: 0;
-        vertical-align: middle;
-    }
-    .form-inline .radio,
-    .form-inline .checkbox {
-        display: inline-block;
-        padding-left: 0;
-        margin-top: 0;
-        margin-bottom: 0;
-        vertical-align: middle;
-    }
-    .form-inline .radio input[type="radio"],
-    .form-inline .checkbox input[type="checkbox"] {
-        float: none;
-        margin-left: 0;
-    }
-    .form-inline .has-feedback .form-control-feedback {
-        top: 0;
-    }
-}
-.form-horizontal .control-label,
-.form-horizontal .radio,
-.form-horizontal .checkbox,
-.form-horizontal .radio-inline,
-.form-horizontal .checkbox-inline {
-    padding-top: 7px;
-    margin-top: 0;
-    margin-bottom: 0;
-}
-.form-horizontal .radio,
-.form-horizontal .checkbox {
-    min-height: 27px;
-}
-.form-horizontal .form-group {
-    margin-right: -15px;
-    margin-left: -15px;
-}
-.form-horizontal .form-control-static {
-    padding-top: 7px;
-}
-@media (min-width: 768px) {
-    .form-horizontal .control-label {
-        text-align: right;
-    }
-}
-.form-horizontal .has-feedback .form-control-feedback {
-    top: 0;
-    right: 15px;
-}
-.btn {
-    display: inline-block;
-    padding: 6px 12px;
-    margin-bottom: 0;
-    font-size: 14px;
-    font-weight: normal;
-    line-height: 1.42857143;
-    text-align: center;
-    white-space: nowrap;
-    vertical-align: middle;
-    cursor: pointer;
-    -webkit-user-select: none;
-    -moz-user-select: none;
-    -ms-user-select: none;
-    user-select: none;
-    background-image: none;
-    border: 1px solid transparent;
-    border-radius: 4px;
-}
-.btn:focus,
-.btn:active:focus,
-.btn.active:focus {
-    outline: thin dotted;
-    outline: 5px auto -webkit-focus-ring-color;
-    outline-offset: -2px;
-}
-.btn:hover,
-.btn:focus {
-    color: #333;
-    text-decoration: none;
-}
-.btn:active,
-.btn.active {
-    background-image: none;
-    outline: 0;
-    -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-    box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn.disabled,
-.btn[disabled],
-fieldset[disabled] .btn {
-    pointer-events: none;
-    cursor: not-allowed;
-    filter: alpha(opacity=65);
-    -webkit-box-shadow: none;
-    box-shadow: none;
-    opacity: .65;
-}
-.btn-default {
-    color: #333;
-    background-color: #fff;
-    border-color: #ccc;
-}
-.btn-default:hover,
-.btn-default:focus,
-.btn-default:active,
-.btn-default.active,
-.open .dropdown-toggle.btn-default {
-    color: #333;
-    background-color: #ebebeb;
-    border-color: #adadad;
-}
-.btn-default:active,
-.btn-default.active,
-.open .dropdown-toggle.btn-default {
-    background-image: none;
-}
-.btn-default.disabled,
-.btn-default[disabled],
-fieldset[disabled] .btn-default,
-.btn-default.disabled:hover,
-.btn-default[disabled]:hover,
-fieldset[disabled] .btn-default:hover,
-.btn-default.disabled:focus,
-.btn-default[disabled]:focus,
-fieldset[disabled] .btn-default:focus,
-.btn-default.disabled:active,
-.btn-default[disabled]:active,
-fieldset[disabled] .btn-default:active,
-.btn-default.disabled.active,
-.btn-default[disabled].active,
-fieldset[disabled] .btn-default.active {
-    background-color: #fff;
-    border-color: #ccc;
-}
-.btn-default .badge {
-    color: #fff;
-    background-color: #333;
-}
-.btn-primary {
-    color: #fff;
-    background-color: #428bca;
-    border-color: #357ebd;
-}
-.btn-primary:hover,
-.btn-primary:focus,
-.btn-primary:active,
-.btn-primary.active,
-.open .dropdown-toggle.btn-primary {
-    color: #fff;
-    background-color: #3276b1;
-    border-color: #285e8e;
-}
-.btn-primary:active,
-.btn-primary.active,
-.open .dropdown-toggle.btn-primary {
-    background-image: none;
-}
-.btn-primary.disabled,
-.btn-primary[disabled],
-fieldset[disabled] .btn-primary,
-.btn-primary.disabled:hover,
-.btn-primary[disabled]:hover,
-fieldset[disabled] .btn-primary:hover,
-.btn-primary.disabled:focus,
-.btn-primary[disabled]:focus,
-fieldset[disabled] .btn-primary:focus,
-.btn-primary.disabled:active,
-.btn-primary[disabled]:active,
-fieldset[disabled] .btn-primary:active,
-.btn-primary.disabled.active,
-.btn-primary[disabled].active,
-fieldset[disabled] .btn-primary.active {
-    background-color: #428bca;
-    border-color: #357ebd;
-}
-.btn-primary .badge {
-    color: #428bca;
-    background-color: #fff;
-}
-.btn-success {
-    color: #fff;
-    background-color: #5cb85c;
-    border-color: #4cae4c;
-}
-.btn-success:hover,
-.btn-success:focus,
-.btn-success:active,
-.btn-success.active,
-.open .dropdown-toggle.btn-success {
-    color: #fff;
-    background-color: #47a447;
-    border-color: #398439;
-}
-.btn-success:active,
-.btn-success.active,
-.open .dropdown-toggle.btn-success {
-    background-image: none;
-}
-.btn-success.disabled,
-.btn-success[disabled],
-fieldset[disabled] .btn-success,
-.btn-success.disabled:hover,
-.btn-success[disabled]:hover,
-fieldset[disabled] .btn-success:hover,
-.btn-success.disabled:focus,
-.btn-success[disabled]:focus,
-fieldset[disabled] .btn-success:focus,
-.btn-success.disabled:active,
-.btn-success[disabled]:active,
-fieldset[disabled] .btn-success:active,
-.btn-success.disabled.active,
-.btn-success[disabled].active,
-fieldset[disabled] .btn-success.active {
-    background-color: #5cb85c;
-    border-color: #4cae4c;
-}
-.btn-success .badge {
-    color: #5cb85c;
-    background-color: #fff;
-}
-.btn-info {
-    color: #fff;
-    background-color: #5bc0de;
-    border-color: #46b8da;
-}
-.btn-info:hover,
-.btn-info:focus,
-.btn-info:active,
-.btn-info.active,
-.open .dropdown-toggle.btn-info {
-    color: #fff;
-    background-color: #39b3d7;
-    border-color: #269abc;
-}
-.btn-info:active,
-.btn-info.active,
-.open .dropdown-toggle.btn-info {
-    background-image: none;
-}
-.btn-info.disabled,
-.btn-info[disabled],
-fieldset[disabled] .btn-info,
-.btn-info.disabled:hover,
-.btn-info[disabled]:hover,
-fieldset[disabled] .btn-info:hover,
-.btn-info.disabled:focus,
-.btn-info[disabled]:focus,
-fieldset[disabled] .btn-info:focus,
-.btn-info.disabled:active,
-.btn-info[disabled]:active,
-fieldset[disabled] .btn-info:active,
-.btn-info.disabled.active,
-.btn-info[disabled].active,
-fieldset[disabled] .btn-info.active {
-    background-color: #5bc0de;
-    border-color: #46b8da;
-}
-.btn-info .badge {
-    color: #5bc0de;
-    background-color: #fff;
-}
-.btn-warning {
-    color: #fff;
-    background-color: #f0ad4e;
-    border-color: #eea236;
-}
-.btn-warning:hover,
-.btn-warning:focus,
-.btn-warning:active,
-.btn-warning.active,
-.open .dropdown-toggle.btn-warning {
-    color: #fff;
-    background-color: #ed9c28;
-    border-color: #d58512;
-}
-.btn-warning:active,
-.btn-warning.active,
-.open .dropdown-toggle.btn-warning {
-    background-image: none;
-}
-.btn-warning.disabled,
-.btn-warning[disabled],
-fieldset[disabled] .btn-warning,
-.btn-warning.disabled:hover,
-.btn-warning[disabled]:hover,
-fieldset[disabled] .btn-warning:hover,
-.btn-warning.disabled:focus,
-.btn-warning[disabled]:focus,
-fieldset[disabled] .btn-warning:focus,
-.btn-warning.disabled:active,
-.btn-warning[disabled]:active,
-fieldset[disabled] .btn-warning:active,
-.btn-warning.disabled.active,
-.btn-warning[disabled].active,
-fieldset[disabled] .btn-warning.active {
-    background-color: #f0ad4e;
-    border-color: #eea236;
-}
-.btn-warning .badge {
-    color: #f0ad4e;
-    background-color: #fff;
-}
-.btn-danger {
-    color: #fff;
-    background-color: #d9534f;
-    border-color: #d43f3a;
-}
-.btn-danger:hover,
-.btn-danger:focus,
-.btn-danger:active,
-.btn-danger.active,
-.open .dropdown-toggle.btn-danger {
-    color: #fff;
-    background-color: #d2322d;
-    border-color: #ac2925;
-}
-.btn-danger:active,
-.btn-danger.active,
-.open .dropdown-toggle.btn-danger {
-    background-image: none;
-}
-.btn-danger.disabled,
-.btn-danger[disabled],
-fieldset[disabled] .btn-danger,
-.btn-danger.disabled:hover,
-.btn-danger[disabled]:hover,
-fieldset[disabled] .btn-danger:hover,
-.btn-danger.disabled:focus,
-.btn-danger[disabled]:focus,
-fieldset[disabled] .btn-danger:focus,
-.btn-danger.disabled:active,
-.btn-danger[disabled]:active,
-fieldset[disabled] .btn-danger:active,
-.btn-danger.disabled.active,
-.btn-danger[disabled].active,
-fieldset[disabled] .btn-danger.active {
-    background-color: #d9534f;
-    border-color: #d43f3a;
-}
-.btn-danger .badge {
-    color: #d9534f;
-    background-color: #fff;
-}
-.btn-link {
-    font-weight: normal;
-    color: #428bca;
-    cursor: pointer;
-    border-radius: 0;
-}
-.btn-link,
-.btn-link:active,
-.btn-link[disabled],
-fieldset[disabled] .btn-link {
-    background-color: transparent;
-    -webkit-box-shadow: none;
-    box-shadow: none;
-}
-.btn-link,
-.btn-link:hover,
-.btn-link:focus,
-.btn-link:active {
-    border-color: transparent;
-}
-.btn-link:hover,
-.btn-link:focus {
-    color: #2a6496;
-    text-decoration: underline;
-    background-color: transparent;
-}
-.btn-link[disabled]:hover,
-fieldset[disabled] .btn-link:hover,
-.btn-link[disabled]:focus,
-fieldset[disabled] .btn-link:focus {
-    color: #999;
-    text-decoration: none;
-}
-.btn-lg,
-.btn-group-lg > .btn {
-    padding: 10px 16px;
-    font-size: 18px;
-    line-height: 1.33;
-    border-radius: 6px;
-}
-.btn-sm,
-.btn-group-sm > .btn {
-    padding: 5px 10px;
-    font-size: 12px;
-    line-height: 1.5;
-    border-radius: 3px;
-}
-.btn-xs,
-.btn-group-xs > .btn {
-    padding: 1px 5px;
-    font-size: 12px;
-    line-height: 1.5;
-    border-radius: 3px;
-}
-.btn-block {
-    display: block;
-    width: 100%;
-    padding-right: 0;
-    padding-left: 0;
-}
-.btn-block + .btn-block {
-    margin-top: 5px;
-}
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
-    width: 100%;
-}
-.fade {
-    opacity: 0;
-    -webkit-transition: opacity .15s linear;
-    transition: opacity .15s linear;
-}
-.fade.in {
-    opacity: 1;
-}
-.collapse {
-    display: none;
-}
-.collapse.in {
-    display: block;
-}
-.collapsing {
-    position: relative;
-    height: 0;
-    overflow: hidden;
-    -webkit-transition: height .35s ease;
-    transition: height .35s ease;
-}
-@font-face {
-    font-family: 'Glyphicons Halflings';
-
-    src: url('../fonts/glyphicons-halflings-regular.eot');
-    src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
-}
-.glyphicon {
-    position: relative;
-    top: 1px;
-    display: inline-block;
-    font-family: 'Glyphicons Halflings';
-    font-style: normal;
-    font-weight: normal;
-    line-height: 1;
-
-    -webkit-font-smoothing: antialiased;
-    -moz-osx-font-smoothing: grayscale;
-}
-.glyphicon-asterisk:before {
-    content: "\2a";
-}
-.glyphicon-plus:before {
-    content: "\2b";
-}
-.glyphicon-euro:before {
-    content: "\20ac";
-}
-.glyphicon-minus:before {
-    content: "\2212";
-}
-.glyphicon-cloud:before {
-    content: "\2601";
-}
-.glyphicon-envelope:before {
-    content: "\2709";
-}
-.glyphicon-pencil:before {
-    content: "\270f";
-}
-.glyphicon-glass:before {
-    content: "\e001";
-}
-.glyphicon-music:before {
-    content: "\e002";
-}
-.glyphicon-search:before {
-    content: "\e003";
-}
-.glyphicon-heart:before {
-    content: "\e005";
-}
-.glyphicon-star:before {
-    content: "\e006";
-}
-.glyphicon-star-empty:before {
-    content: "\e007";
-}
-.glyphicon-user:before {
-    content: "\e008";
-}
-.glyphicon-film:before {
-    content: "\e009";
-}
-.glyphicon-th-large:before {
-    content: "\e010";
-}
-.glyphicon-th:before {
-    content: "\e011";
-}
-.glyphicon-th-list:before {
-    content: "\e012";
-}
-.glyphicon-ok:before {
-    content: "\e013";
-}
-.glyphicon-remove:before {
-    content: "\e014";
-}
-.glyphicon-zoom-in:before {
-    content: "\e015";
-}
-.glyphicon-zoom-out:before {
-    content: "\e016";
-}
-.glyphicon-off:before {
-    content: "\e017";
-}
-.glyphicon-signal:before {
-    content: "\e018";
-}
-.glyphicon-cog:before {
-    content: "\e019";
-}
-.glyphicon-trash:before {
-    content: "\e020";
-}
-.glyphicon-home:before {
-    content: "\e021";
-}
-.glyphicon-file:before {
-    content: "\e022";
-}
-.glyphicon-time:before {
-    content: "\e023";
-}
-.glyphicon-road:before {
-    content: "\e024";
-}
-.glyphicon-download-alt:before {
-    content: "\e025";
-}
-.glyphicon-download:before {
-    content: "\e026";
-}
-.glyphicon-upload:before {
-    content: "\e027";
-}
-.glyphicon-inbox:before {
-    content: "\e028";
-}
-.glyphicon-play-circle:before {
-    content: "\e029";
-}
-.glyphicon-repeat:before {
-    content: "\e030";
-}
-.glyphicon-refresh:before {
-    content: "\e031";
-}
-.glyphicon-list-alt:before {
-    content: "\e032";
-}
-.glyphicon-lock:before {
-    content: "\e033";
-}
-.glyphicon-flag:before {
-    content: "\e034";
-}
-.glyphicon-headphones:before {
-    content: "\e035";
-}
-.glyphicon-volume-off:before {
-    content: "\e036";
-}
-.glyphicon-volume-down:before {
-    content: "\e037";
-}
-.glyphicon-volume-up:before {
-    content: "\e038";
-}
-.glyphicon-qrcode:before {
-    content: "\e039";
-}
-.glyphicon-barcode:before {
-    content: "\e040";
-}
-.glyphicon-tag:before {
-    content: "\e041";
-}
-.glyphicon-tags:before {
-    content: "\e042";
-}
-.glyphicon-book:before {
-    content: "\e043";
-}
-.glyphicon-bookmark:before {
-    content: "\e044";
-}
-.glyphicon-print:before {
-    content: "\e045";
-}
-.glyphicon-camera:before {
-    content: "\e046";
-}
-.glyphicon-font:before {
-    content: "\e047";
-}
-.glyphicon-bold:before {
-    content: "\e048";
-}
-.glyphicon-italic:before {
-    content: "\e049";
-}
-.glyphicon-text-height:before {
-    content: "\e050";
-}
-.glyphicon-text-width:before {
-    content: "\e051";
-}
-.glyphicon-align-left:before {
-    content: "\e052";
-}
-.glyphicon-align-center:before {
-    content: "\e053";
-}
-.glyphicon-align-right:before {
-    content: "\e054";
-}
-.glyphicon-align-justify:before {
-    content: "\e055";
-}
-.glyphicon-list:before {
-    content: "\e056";
-}
-.glyphicon-indent-left:before {
-    content: "\e057";
-}
-.glyphicon-indent-right:before {
-    content: "\e058";
-}
-.glyphicon-facetime-video:before {
-    content: "\e059";
-}
-.glyphicon-picture:before {
-    content: "\e060";
-}
-.glyphicon-map-marker:before {
-    content: "\e062";
-}
-.glyphicon-adjust:before {
-    content: "\e063";
-}
-.glyphicon-tint:before {
-    content: "\e064";
-}
-.glyphicon-edit:before {
-    content: "\e065";
-}
-.glyphicon-share:before {
-    content: "\e066";
-}
-.glyphicon-check:before {
-    content: "\e067";
-}
-.glyphicon-move:before {
-    content: "\e068";
-}
-.glyphicon-step-backward:before {
-    content: "\e069";
-}
-.glyphicon-fast-backward:before {
-    content: "\e070";
-}
-.glyphicon-backward:before {
-    content: "\e071";
-}
-.glyphicon-play:before {
-    content: "\e072";
-}
-.glyphicon-pause:before {
-    content: "\e073";
-}
-.glyphicon-stop:before {
-    content: "\e074";
-}
-.glyphicon-forward:before {
-    content: "\e075";
-}
-.glyphicon-fast-forward:before {
-    content: "\e076";
-}
-.glyphicon-step-forward:before {
-    content: "\e077";
-}
-.glyphicon-eject:before {
-    content: "\e078";
-}
-.glyphicon-chevron-left:before {
-    content: "\e079";
-}
-.glyphicon-chevron-right:before {
-    content: "\e080";
-}
-.glyphicon-plus-sign:before {
-    content: "\e081";
-}
-.glyphicon-minus-sign:before {
-    content: "\e082";
-}
-.glyphicon-remove-sign:before {
-    content: "\e083";
-}
-.glyphicon-ok-sign:before {
-    content: "\e084";
-}
-.glyphicon-question-sign:before {
-    content: "\e085";
-}
-.glyphicon-info-sign:before {
-    content: "\e086";
-}
-.glyphicon-screenshot:before {
-    content: "\e087";
-}
-.glyphicon-remove-circle:before {
-    content: "\e088";
-}
-.glyphicon-ok-circle:before {
-    content: "\e089";
-}
-.glyphicon-ban-circle:before {
-    content: "\e090";
-}
-.glyphicon-arrow-left:before {
-    content: "\e091";
-}
-.glyphicon-arrow-right:before {
-    content: "\e092";
-}
-.glyphicon-arrow-up:before {
-    content: "\e093";
-}
-.glyphicon-arrow-down:before {
-    content: "\e094";
-}
-.glyphicon-share-alt:before {
-    content: "\e095";
-}
-.glyphicon-resize-full:before {
-    content: "\e096";
-}
-.glyphicon-resize-small:before {
-    content: "\e097";
-}
-.glyphicon-exclamation-sign:before {
-    content: "\e101";
-}
-.glyphicon-gift:before {
-    content: "\e102";
-}
-.glyphicon-leaf:before {
-    content: "\e103";
-}
-.glyphicon-fire:before {
-    content: "\e104";
-}
-.glyphicon-eye-open:before {
-    content: "\e105";
-}
-.glyphicon-eye-close:before {
-    content: "\e106";
-}
-.glyphicon-warning-sign:before {
-    content: "\e107";
-}
-.glyphicon-plane:before {
-    content: "\e108";
-}
-.glyphicon-calendar:before {
-    content: "\e109";
-}
-.glyphicon-random:before {
-    content: "\e110";
-}
-.glyphicon-comment:before {
-    content: "\e111";
-}
-.glyphicon-magnet:before {
-    content: "\e112";
-}
-.glyphicon-chevron-up:before {
-    content: "\e113";
-}
-.glyphicon-chevron-down:before {
-    content: "\e114";
-}
-.glyphicon-retweet:before {
-    content: "\e115";
-}
-.glyphicon-shopping-cart:before {
-    content: "\e116";
-}
-.glyphicon-folder-close:before {
-    content: "\e117";
-}
-.glyphicon-folder-open:before {
-    content: "\e118";
-}
-.glyphicon-resize-vertical:before {
-    content: "\e119";
-}
-.glyphicon-resize-horizontal:before {
-    content: "\e120";
-}
-.glyphicon-hdd:before {
-    content: "\e121";
-}
-.glyphicon-bullhorn:before {
-    content: "\e122";
-}
-.glyphicon-bell:before {
-    content: "\e123";
-}
-.glyphicon-certificate:before {
-    content: "\e124";
-}
-.glyphicon-thumbs-up:before {
-    content: "\e125";
-}
-.glyphicon-thumbs-down:before {
-    content: "\e126";
-}
-.glyphicon-hand-right:before {
-    content: "\e127";
-}
-.glyphicon-hand-left:before {
-    content: "\e128";
-}
-.glyphicon-hand-up:before {
-    content: "\e129";
-}
-.glyphicon-hand-down:before {
-    content: "\e130";
-}
-.glyphicon-circle-arrow-right:before {
-    content: "\e131";
-}
-.glyphicon-circle-arrow-left:before {
-    content: "\e132";
-}
-.glyphicon-circle-arrow-up:before {
-    content: "\e133";
-}
-.glyphicon-circle-arrow-down:before {
-    content: "\e134";
-}
-.glyphicon-globe:before {
-    content: "\e135";
-}
-.glyphicon-wrench:before {
-    content: "\e136";
-}
-.glyphicon-tasks:before {
-    content: "\e137";
-}
-.glyphicon-filter:before {
-    content: "\e138";
-}
-.glyphicon-briefcase:before {
-    content: "\e139";
-}
-.glyphicon-fullscreen:before {
-    content: "\e140";
-}
-.glyphicon-dashboard:before {
-    content: "\e141";
-}
-.glyphicon-paperclip:before {
-    content: "\e142";
-}
-.glyphicon-heart-empty:before {
-    content: "\e143";
-}
-.glyphicon-link:before {
-    content: "\e144";
-}
-.glyphicon-phone:before {
-    content: "\e145";
-}
-.glyphicon-pushpin:before {
-    content: "\e146";
-}
-.glyphicon-usd:before {
-    content: "\e148";
-}
-.glyphicon-gbp:before {
-    content: "\e149";
-}
-.glyphicon-sort:before {
-    content: "\e150";
-}
-.glyphicon-sort-by-alphabet:before {
-    content: "\e151";
-}
-.glyphicon-sort-by-alphabet-alt:before {
-    content: "\e152";
-}
-.glyphicon-sort-by-order:before {
-    content: "\e153";
-}
-.glyphicon-sort-by-order-alt:before {
-    content: "\e154";
-}
-.glyphicon-sort-by-attributes:before {
-    content: "\e155";
-}
-.glyphicon-sort-by-attributes-alt:before {
-    content: "\e156";
-}
-.glyphicon-unchecked:before {
-    content: "\e157";
-}
-.glyphicon-expand:before {
-    content: "\e158";
-}
-.glyphicon-collapse-down:before {
-    content: "\e159";
-}
-.glyphicon-collapse-up:before {
-    content: "\e160";
-}
-.glyphicon-log-in:before {
-    content: "\e161";
-}
-.glyphicon-flash:before {
-    content: "\e162";
-}
-.glyphicon-log-out:before {
-    content: "\e163";
-}
-.glyphicon-new-window:before {
-    content: "\e164";
-}
-.glyphicon-record:before {
-    content: "\e165";
-}
-.glyphicon-save:before {
-    content: "\e166";
-}
-.glyphicon-open:before {
-    content: "\e167";
-}
-.glyphicon-saved:before {
-    content: "\e168";
-}
-.glyphicon-import:before {
-    content: "\e169";
-}
-.glyphicon-export:before {
-    content: "\e170";
-}
-.glyphicon-send:before {
-    content: "\e171";
-}
-.glyphicon-floppy-disk:before {
-    content: "\e172";
-}
-.glyphicon-floppy-saved:before {
-    content: "\e173";
-}
-.glyphicon-floppy-remove:before {
-    content: "\e174";
-}
-.glyphicon-floppy-save:before {
-    content: "\e175";
-}
-.glyphicon-floppy-open:before {
-    content: "\e176";
-}
-.glyphicon-credit-card:before {
-    content: "\e177";
-}
-.glyphicon-transfer:before {
-    content: "\e178";
-}
-.glyphicon-cutlery:before {
-    content: "\e179";
-}
-.glyphicon-header:before {
-    content: "\e180";
-}
-.glyphicon-compressed:before {
-    content: "\e181";
-}
-.glyphicon-earphone:before {
-    content: "\e182";
-}
-.glyphicon-phone-alt:before {
-    content: "\e183";
-}
-.glyphicon-tower:before {
-    content: "\e184";
-}
-.glyphicon-stats:before {
-    content: "\e185";
-}
-.glyphicon-sd-video:before {
-    content: "\e186";
-}
-.glyphicon-hd-video:before {
-    content: "\e187";
-}
-.glyphicon-subtitles:before {
-    content: "\e188";
-}
-.glyphicon-sound-stereo:before {
-    content: "\e189";
-}
-.glyphicon-sound-dolby:before {
-    content: "\e190";
-}
-.glyphicon-sound-5-1:before {
-    content: "\e191";
-}
-.glyphicon-sound-6-1:before {
-    content: "\e192";
-}
-.glyphicon-sound-7-1:before {
-    content: "\e193";
-}
-.glyphicon-copyright-mark:before {
-    content: "\e194";
-}
-.glyphicon-registration-mark:before {
-    content: "\e195";
-}
-.glyphicon-cloud-download:before {
-    content: "\e197";
-}
-.glyphicon-cloud-upload:before {
-    content: "\e198";
-}
-.glyphicon-tree-conifer:before {
-    content: "\e199";
-}
-.glyphicon-tree-deciduous:before {
-    content: "\e200";
-}
-.caret {
-    display: inline-block;
-    width: 0;
-    height: 0;
-    margin-left: 2px;
-    vertical-align: middle;
-    border-top: 4px solid;
-    border-right: 4px solid transparent;
-    border-left: 4px solid transparent;
-}
-.dropdown {
-    position: relative;
-}
-.dropdown-toggle:focus {
-    outline: 0;
-}
-.dropdown-menu {
-    position: absolute;
-    top: 100%;
-    left: 0;
-    z-index: 1000;
-    display: none;
-    float: left;
-    min-width: 160px;
-    padding: 5px 0;
-    margin: 2px 0 0;
-    font-size: 14px;
-    list-style: none;
-    background-color: #fff;
-    background-clip: padding-box;
-    border: 1px solid #ccc;
-    border: 1px solid rgba(0, 0, 0, .15);
-    border-radius: 4px;
-    -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
-    box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
-}
-.dropdown-menu.pull-right {
-    right: 0;
-    left: auto;
-}
-.dropdown-menu .divider {
-    height: 1px;
-    margin: 9px 0;
-    overflow: hidden;
-    background-color: #e5e5e5;
-}
-.dropdown-menu > li > a {
-    display: block;
-    padding: 3px 20px;
-    clear: both;
-    font-weight: normal;
-    line-height: 1.42857143;
-    color: #333;
-    white-space: nowrap;
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
-    color: #262626;
-    text-decoration: none;
-    background-color: #f5f5f5;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
-    color: #fff;
-    text-decoration: none;
-    background-color: #428bca;
-    outline: 0;
-}
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-    color: #999;
-}
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-    text-decoration: none;
-    cursor: not-allowed;
-    background-color: transparent;
-    background-image: none;
-    filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.open > .dropdown-menu {
-    display: block;
-}
-.open > a {
-    outline: 0;
-}
-.dropdown-menu-right {
-    right: 0;
-    left: auto;
-}
-.dropdown-menu-left {
-    right: auto;
-    left: 0;
-}
-.dropdown-header {
-    display: block;
-    padding: 3px 20px;
-    font-size: 12px;
-    line-height: 1.42857143;
-    color: #999;
-}
-.dropdown-backdrop {
-    position: fixed;
-    top: 0;
-    right: 0;
-    bottom: 0;
-    left: 0;
-    z-index: 990;
-}
-.pull-right > .dropdown-menu {
-    right: 0;
-    left: auto;
-}
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
-    content: "";
-    border-top: 0;
-    border-bottom: 4px solid;
-}
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
-    top: auto;
-    bottom: 100%;
-    margin-bottom: 1px;
-}
-@media (min-width: 768px) {
-    .navbar-right .dropdown-menu {
-        right: 0;
-        left: auto;
-    }
-    .navbar-right .dropdown-menu-left {
-        right: auto;
-        left: 0;
-    }
-}
-.btn-group,
-.btn-group-vertical {
-    position: relative;
-    display: inline-block;
-    vertical-align: middle;
-}
-.btn-group > .btn,
-.btn-group-vertical > .btn {
-    position: relative;
-    float: left;
-}
-.btn-group > .btn:hover,
-.btn-group-vertical > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus,
-.btn-group > .btn:active,
-.btn-group-vertical > .btn:active,
-.btn-group > .btn.active,
-.btn-group-vertical > .btn.active {
-    z-index: 2;
-}
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus {
-    outline: none;
-}
-.btn-group .btn + .btn,
-.btn-group .btn + .btn-group,
-.btn-group .btn-group + .btn,
-.btn-group .btn-group + .btn-group {
-    margin-left: -1px;
-}
-.btn-toolbar {
-    margin-left: -5px;
-}
-.btn-toolbar .btn-group,
-.btn-toolbar .input-group {
-    float: left;
-}
-.btn-toolbar > .btn,
-.btn-toolbar > .btn-group,
-.btn-toolbar > .input-group {
-    margin-left: 5px;
-}
-.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
-    border-radius: 0;
-}
-.btn-group > .btn:first-child {
-    margin-left: 0;
-}
-.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
-    border-top-right-radius: 0;
-    border-bottom-right-radius: 0;
-}
-.btn-group > .btn:last-child:not(:first-child),
-.btn-group > .dropdown-toggle:not(:first-child) {
-    border-top-left-radius: 0;
-    border-bottom-left-radius: 0;
-}
-.btn-group > .btn-group {
-    float: left;
-}
-.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
-    border-radius: 0;
-}
-.btn-group > .btn-group:first-child > .btn:last-child,
-.btn-group > .btn-group:first-child > .dropdown-toggle {
-    border-top-right-radius: 0;
-    border-bottom-right-radius: 0;
-}
-.btn-group > .btn-group:last-child > .btn:first-child {
-    border-top-left-radius: 0;
-    border-bottom-left-radius: 0;
-}
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
-    outline: 0;
-}
-.btn-group > .btn + .dropdown-toggle {
-    padding-right: 8px;
-    padding-left: 8px;
-}
-.btn-group > .btn-lg + .dropdown-toggle {
-    padding-right: 12px;
-    padding-left: 12px;
-}
-.btn-group.open .dropdown-toggle {
-    -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-    box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn-group.open .dropdown-toggle.btn-link {
-    -webkit-box-shadow: none;
-    box-shadow: none;
-}
-.btn .caret {
-    margin-left: 0;
-}
-.btn-lg .caret {
-    border-width: 5px 5px 0;
-    border-bottom-width: 0;
-}
-.dropup .btn-lg .caret {
-    border-width: 0 5px 5px;
-}
-.btn-group-vertical > .btn,
-.btn-group-vertical > .btn-group,
-.btn-group-vertical > .btn-group > .btn {
-    display: block;
-    float: none;
-    width: 100%;
-    max-width: 100%;
-}
-.btn-group-vertical > .btn-group > .btn {
-    float: none;
-}
-.btn-group-vertical > .btn + .btn,
-.btn-group-vertical > .btn + .btn-group,
-.btn-group-vertical > .btn-group + .btn,
-.btn-group-vertical > .btn-group + .btn-group {
-    margin-top: -1px;
-    margin-left: 0;
-}
-.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
-    border-radius: 0;
-}
-.btn-group-vertical > .btn:first-child:not(:last-child) {
-    border-top-right-radius: 4px;
-    border-bottom-right-radius: 0;
-    border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn:last-child:not(:first-child) {
-    border-top-left-radius: 0;
-    border-top-right-radius: 0;
-    border-bottom-left-radius: 4px;
-}
-.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
-    border-radius: 0;
-}
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
-    border-bottom-right-radius: 0;
-    border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
-    border-top-left-radius: 0;
-    border-top-right-radius: 0;
-}
-.btn-group-justified {
-    display: table;
-    width: 100%;
-    table-layout: fixed;
-    border-collapse: separate;
-}
-.btn-group-justified > .btn,
-.btn-group-justified > .btn-group {
-    display: table-cell;
-    float: none;
-    width: 1%;
-}
-.btn-group-justified > .btn-group .btn {
-    width: 100%;
-}
-[data-toggle="buttons"] > .btn > input[type="radio"],
-[data-toggle="buttons"] > .btn > input[type="checkbox"] {
-    display: none;
-}
-.input-group {
-    position: relative;
-    display: table;
-    border-collapse: separate;
-}
-.input-group[class*="col-"] {
-    float: none;
-    padding-right: 0;
-    padding-left: 0;
-}
-.input-group .form-control {
-    position: relative;
-    z-index: 2;
-    float: left;
-    width: 100%;
-    margin-bottom: 0;
-}
-.input-group-lg > .form-control,
-.input-group-lg > .input-group-addon,
-.input-group-lg > .input-group-btn > .btn {
-    height: 46px;
-    padding: 10px 16px;
-    font-size: 18px;
-    line-height: 1.33;
-    border-radius: 6px;
-}
-select.input-group-lg > .form-control,
-select.input-group-lg > .input-group-addon,
-select.input-group-lg > .input-group-btn > .btn {
-    height: 46px;
-    line-height: 46px;
-}
-textarea.input-group-lg > .form-control,
-textarea.input-group-lg > .input-group-addon,
-textarea.input-group-lg > .input-group-btn > .btn,
-select[multiple].input-group-lg > .form-control,
-select[multiple].input-group-lg > .input-group-addon,
-select[multiple].input-group-lg > .input-group-btn > .btn {
-    height: auto;
-}
-.input-group-sm > .form-control,
-.input-group-sm > .input-group-addon,
-.input-group-sm > .input-group-btn > .btn {
-    height: 30px;
-    padding: 5px 10px;
-    font-size: 12px;
-    line-height: 1.5;
-    border-radius: 3px;
-}
-select.input-group-sm > .form-control,
-select.input-group-sm > .input-group-addon,
-select.input-group-sm > .input-group-btn > .btn {
-    height: 30px;
-    line-height: 30px;
-}
-textarea.input-group-sm > .form-control,
-textarea.input-group-sm > .input-group-addon,
-textarea.input-group-sm > .input-group-btn > .btn,
-select[multiple].input-group-sm > .form-control,
-select[multiple].input-group-sm > .input-group-addon,
-select[multiple].input-group-sm > .input-group-btn > .btn {
-    height: auto;
-}
-.input-group-addon,
-.input-group-btn,
-.input-group .form-control {
-    display: table-cell;
-}
-.input-group-addon:not(:first-child):not(:last-child),
-.input-group-btn:not(:first-child):not(:last-child),
-.input-group .form-control:not(:first-child):not(:last-child) {
-    border-radius: 0;
-}
-.input-group-addon,
-.input-group-btn {
-    width: 1%;
-    white-space: nowrap;
-    vertical-align: middle;
-}
-.input-group-addon {
-    padding: 6px 12px;
-    font-size: 14px;
-    font-weight: normal;
-    line-height: 1;
-    color: #555;
-    text-align: center;
-    background-color: #eee;
-    border: 1px solid #ccc;
-    border-radius: 4px;
-}
-.input-group-addon.input-sm {
-    padding: 5px 10px;
-    font-size: 12px;
-    border-radius: 3px;
-}
-.input-group-addon.input-lg {
-    padding: 10px 16px;
-    font-size: 18px;
-    border-radius: 6px;
-}
-.input-group-addon input[type="radio"],
-.input-group-addon input[type="checkbox"] {
-    margin-top: 0;
-}
-.input-group .form-control:first-child,
-.input-group-addon:first-child,
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group > .btn,
-.input-group-btn:first-child > .dropdown-toggle,
-.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
-.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
-    border-top-right-radius: 0;
-    border-bottom-right-radius: 0;
-}
-.input-group-addon:first-child {
-    border-right: 0;
-}
-.input-group .form-control:last-child,
-.input-group-addon:last-child,
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group > .btn,
-.input-group-btn:last-child > .dropdown-toggle,
-.input-group-btn:first-child > .btn:not(:first-child),
-.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
-    border-top-left-radius: 0;
-    border-bottom-left-radius: 0;
-}
-.input-group-addon:last-child {
-    border-left: 0;
-}
-.input-group-btn {
-    position: relative;
-    font-size: 0;
-    white-space: nowrap;
-}
-.input-group-btn > .btn {
-    position: relative;
-}
-.input-group-btn > .btn + .btn {
-    margin-left: -1px;
-}
-.input-group-btn > .btn:hover,
-.input-group-btn > .btn:focus,
-.input-group-btn > .btn:active {
-    z-index: 2;
-}
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group {
-    margin-right: -1px;
-}
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group {
-    margin-left: -1px;
-}
-.nav {
-    padding-left: 0;
-    margin-bottom: 0;
-    list-style: none;
-}
-.nav > li {
-    position: relative;
-    display: block;
-}
-.nav > li > a {
-    position: relative;
-    display: block;
-    padding: 10px 15px;
-}
-.nav > li > a:hover,
-.nav > li > a:focus {
-    text-decoration: none;
-    background-color: #eee;
-}
-.nav > li.disabled > a {
-    color: #999;
-}
-.nav > li.disabled > a:hover,
-.nav > li.disabled > a:focus {
-    color: #999;
-    text-decoration: none;
-    cursor: not-allowed;
-    background-color: transparent;
-}
-.nav .open > a,
-.nav .open > a:hover,
-.nav .open > a:focus {
-    background-color: #eee;
-    border-color: #428bca;
-}
-.nav .nav-divider {
-    height: 1px;
-    margin: 9px 0;
-    overflow: hidden;
-    background-color: #e5e5e5;
-}
-.nav > li > a > img {
-    max-width: none;
-}
-.nav-tabs {
-    border-bottom: 1px solid #ddd;
-}
-.nav-tabs > li {
-    float: left;
-    margin-bottom: -1px;
-}
-.nav-tabs > li > a {
-    margin-right: 2px;
-    line-height: 1.42857143;
-    border: 1px solid transparent;
-    border-radius: 4px 4px 0 0;
-}
-.nav-tabs > li > a:hover {
-    border-color: #eee #eee #ddd;
-}
-.nav-tabs > li.active > a,
-.nav-tabs > li.active > a:hover,
-.nav-tabs > li.active > a:focus {
-    color: #555;
-    cursor: default;
-    background-color: #fff;
-    border: 1px solid #ddd;
-    border-bottom-color: transparent;
-}
-.nav-tabs.nav-justified {
-    width: 100%;
-    border-bottom: 0;
-}
-.nav-tabs.nav-justified > li {
-    float: none;
-}
-.nav-tabs.nav-justified > li > a {
-    margin-bottom: 5px;
-    text-align: center;
-}
-.nav-tabs.nav-justified > .dropdown .dropdown-menu {
-    top: auto;
-    left: auto;
-}
-@media (min-width: 768px) {
-    .nav-tabs.nav-justified > li {
-        display: table-cell;
-        width: 1%;
-    }
-    .nav-tabs.nav-justified > li > a {
-        margin-bottom: 0;
-    }
-}
-.nav-tabs.nav-justified > li > a {
-    margin-right: 0;
-    border-radius: 4px;
-}
-.nav-tabs.nav-justified > .active > a,
-.nav-tabs.nav-justified > .active > a:hover,
-.nav-tabs.nav-justified > .active > a:focus {
-    border: 1px solid #ddd;
-}
-@media (min-width: 768px) {
-    .nav-tabs.nav-justified > li > a {
-        border-bottom: 1px solid #ddd;
-        border-radius: 4px 4px 0 0;
-    }
-    .nav-tabs.nav-justified > .active > a,
-    .nav-tabs.nav-justified > .active > a:hover,
-    .nav-tabs.nav-justified > .active > a:focus {
-        border-bottom-color: #fff;
-    }
-}
-.nav-pills > li {
-    float: left;
-}
-.nav-pills > li > a {
-    border-radius: 4px;
-}
-.nav-pills > li + li {
-    margin-left: 2px;
-}
-.nav-pills > li.active > a,
-.nav-pills > li.active > a:hover,
-.nav-pills > li.active > a:focus {
-    color: #fff;
-    background-color: #428bca;
-}
-.nav-stacked > li {
-    float: none;
-}
-.nav-stacked > li + li {
-    margin-top: 2px;
-    margin-left: 0;
-}
-.nav-justified {
-    width: 100%;
-}
-.nav-justified > li {
-    float: none;
-}
-.nav-justified > li > a {
-    margin-bottom: 5px;
-    text-align: center;
-}
-.nav-justified > .dropdown .dropdown-menu {
-    top: auto;
-    left: auto;
-}
-@media (min-width: 768px) {
-    .nav-justified > li {
-        display: table-cell;
-        width: 1%;
-    }
-    .nav-justified > li > a {
-        margin-bottom: 0;
-    }
-}
-.nav-tabs-justified {
-    border-bottom: 0;
-}
-.nav-tabs-justified > li > a {
-    margin-right: 0;
-    border-radius: 4px;
-}
-.nav-tabs-justified > .active > a,
-.nav-tabs-justified > .active > a:hover,
-.nav-tabs-justified > .active > a:focus {
-    border: 1px solid #ddd;
-}
-@media (min-width: 768px) {
-    .nav-tabs-justified > li > a {
-        border-bottom: 1px solid #ddd;
-        border-radius: 4px 4px 0 0;
-    }
-    .nav-tabs-justified > .active > a,
-    .nav-tabs-justified > .active > a:hover,
-    .nav-tabs-justified > .active > a:focus {
-        border-bottom-color: #fff;
-    }
-}
-.tab-content > .tab-pane {
-    display: none;
-}
-.tab-content > .active {
-    display: block;
-}
-.nav-tabs .dropdown-menu {
-    margin-top: -1px;
-    border-top-left-radius: 0;
-    border-top-right-radius: 0;
-}
-.navbar {
-    position: relative;
-    min-height: 50px;
-    margin-bottom: 20px;
-    border: 1px solid transparent;
-}
-@media (min-width: 768px) {
-    .navbar {
-        border-radius: 4px;
-    }
-}
-@media (min-width: 768px) {
-    .navbar-header {
-        float: left;
-    }
-}
-.navbar-collapse {
-    max-height: 340px;
-    padding-right: 15px;
-    padding-left: 15px;
-    overflow-x: visible;
-    -webkit-overflow-scrolling: touch;
-    border-top: 1px solid transparent;
-    box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
-}
-.navbar-collapse.in {
-    overflow-y: auto;
-}
-@media (min-width: 768px) {
-    .navbar-collapse {
-        width: auto;
-        border-top: 0;
-        box-shadow: none;
-    }
-    .navbar-collapse.collapse {
-        display: block !important;
-        height: auto !important;
-        padding-bottom: 0;
-        overflow: visible !important;
-    }
-    .navbar-collapse.in {
-        overflow-y: visible;
-    }
-    .navbar-fixed-top .navbar-collapse,
-    .navbar-static-top .navbar-collapse,
-    .navbar-fixed-bottom .navbar-collapse {
-        padding-right: 0;
-        padding-left: 0;
-    }
-}
-.container > .navbar-header,
-.container-fluid > .navbar-header,
-.container > .navbar-collapse,
-.container-fluid > .navbar-collapse {
-    margin-right: -15px;
-    margin-left: -15px;
-}
-@media (min-width: 768px) {
-    .container > .navbar-header,
-    .container-fluid > .navbar-header,
-    .container > .navbar-collapse,
-    .container-fluid > .navbar-collapse {
-        margin-right: 0;
-        margin-left: 0;
-    }
-}
-.navbar-static-top {
-    z-index: 1000;
-    border-width: 0 0 1px;
-}
-@media (min-width: 768px) {
-    .navbar-static-top {
-        border-radius: 0;
-    }
-}
-.navbar-fixed-top,
-.navbar-fixed-bottom {
-    position: fixed;
-    right: 0;
-    left: 0;
-    z-index: 1030;
-}
-@media (min-width: 768px) {
-    .navbar-fixed-top,
-    .navbar-fixed-bottom {
-        border-radius: 0;
-    }
-}
-.navbar-fixed-top {
-    top: 0;
-    border-width: 0 0 1px;
-}
-.navbar-fixed-bottom {
-    bottom: 0;
-    margin-bottom: 0;
-    border-width: 1px 0 0;
-}
-.navbar-brand {
-    float: left;
-    height: 50px;
-    padding: 15px 15px;
-    font-size: 18px;
-    line-height: 20px;
-}
-.navbar-brand:hover,
-.navbar-brand:focus {
-    text-decoration: none;
-}
-@media (min-width: 768px) {
-    .navbar > .container .navbar-brand,
-    .navbar > .container-fluid .navbar-brand {
-        margin-left: -15px;
-    }
-}
-.navbar-toggle {
-    position: relative;
-    float: right;
-    padding: 9px 10px;
-    margin-top: 8px;
-    margin-right: 15px;
-    margin-bottom: 8px;
-    background-color: transparent;
-    background-image: none;
-    border: 1px solid transparent;
-    border-radius: 4px;
-}
-.navbar-toggle:focus {
-    outline: none;
-}
-.navbar-toggle .icon-bar {
-    display: block;
-    width: 22px;
-    height: 2px;
-    border-radius: 1px;
-}
-.navbar-toggle .icon-bar + .icon-bar {
-    margin-top: 4px;
-}
-@media (min-width: 768px) {
-    .navbar-toggle {
-        display: none;
-    }
-}
-.navbar-nav {
-    margin: 7.5px -15px;
-}
-.navbar-nav > li > a {
-    padding-top: 10px;
-    padding-bottom: 10px;
-    line-height: 20px;
-}
-@media (max-width: 767px) {
-    .navbar-nav .open .dropdown-menu {
-        position: static;
-        float: none;
-        width: auto;
-        margin-top: 0;
-        background-color: transparent;
-        border: 0;
-        box-shadow: none;
-    }
-    .navbar-nav .open .dropdown-menu > li > a,
-    .navbar-nav .open .dropdown-menu .dropdown-header {
-        padding: 5px 15px 5px 25px;
-    }
-    .navbar-nav .open .dropdown-menu > li > a {
-        line-height: 20px;
-    }
-    .navbar-nav .open .dropdown-menu > li > a:hover,
-    .navbar-nav .open .dropdown-menu > li > a:focus {
-        background-image: none;
-    }
-}
-@media (min-width: 768px) {
-    .navbar-nav {
-        float: left;
-        margin: 0;
-    }
-    .navbar-nav > li {
-        float: left;
-    }
-    .navbar-nav > li > a {
-        padding-top: 15px;
-        padding-bottom: 15px;
-    }
-    .navbar-nav.navbar-right:last-child {
-        margin-right: -15px;
-    }
-}
-@media (min-width: 768px) {
-    .navbar-left {
-        float: left !important;
-    }
-    .navbar-right {
-        float: right !important;
-    }
-}
-.navbar-form {
-    padding: 10px 15px;
-    margin-top: 8px;
-    margin-right: -15px;
-    margin-bottom: 8px;
-    margin-left: -15px;
-    border-top: 1px solid transparent;
-    border-bottom: 1px solid transparent;
-    -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
-    box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
-}
-@media (min-width: 768px) {
-    .navbar-form .form-group {
-        display: inline-block;
-        margin-bottom: 0;
-        vertical-align: middle;
-    }
-    .navbar-form .form-control {
-        display: inline-block;
-        width: auto;
-        vertical-align: middle;
-    }
-    .navbar-form .input-group > .form-control {
-        width: 100%;
-    }
-    .navbar-form .control-label {
-        margin-bottom: 0;
-        vertical-align: middle;
-    }
-    .navbar-form .radio,
-    .navbar-form .checkbox {
-        display: inline-block;
-        padding-left: 0;
-        margin-top: 0;
-        margin-bottom: 0;
-        vertical-align: middle;
-    }
-    .navbar-form .radio input[type="radio"],
-    .navbar-form .checkbox input[type="checkbox"] {
-        float: none;
-        margin-left: 0;
-    }
-    .navbar-form .has-feedback .form-control-feedback {
-        top: 0;
-    }
-}
-@media (max-width: 767px) {
-    .navbar-form .form-group {
-        margin-bottom: 5px;
-    }
-}
-@media (min-width: 768px) {
-    .navbar-form {
-        width: auto;
-        padding-top: 0;
-        padding-bottom: 0;
-        margin-right: 0;
-        margin-left: 0;
-        border: 0;
-        -webkit-box-shadow: none;
-        box-shadow: none;
-    }
-    .navbar-form.navbar-right:last-child {
-        margin-right: -15px;
-    }
-}
-.navbar-nav > li > .dropdown-menu {
-    margin-top: 0;
-    border-top-left-radius: 0;
-    border-top-right-radius: 0;
-}
-.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
-    border-bottom-right-radius: 0;
-    border-bottom-left-radius: 0;
-}
-.navbar-btn {
-    margin-top: 8px;
-    margin-bottom: 8px;
-}
-.navbar-btn.btn-sm {
-    margin-top: 10px;
-    margin-bottom: 10px;
-}
-.navbar-btn.btn-xs {
-    margin-top: 14px;
-    margin-bottom: 14px;
-}
-.navbar-text {
-    margin-top: 15px;
-    margin-bottom: 15px;
-}
-@media (min-width: 768px) {
-    .navbar-text {
-        float: left;
-        margin-right: 15px;
-        margin-left: 15px;
-    }
-    .navbar-text.navbar-right:last-child {
-        margin-right: 0;
-    }
-}
-.navbar-default {
-    background-color: #f8f8f8;
-    border-color: #e7e7e7;
-}
-.navbar-default .navbar-brand {
-    color: #777;
-}
-.navbar-default .navbar-brand:hover,
-.navbar-default .navbar-brand:focus {
-    color: #5e5e5e;
-    background-color: transparent;
-}
-.navbar-default .navbar-text {
-    color: #777;
-}
-.navbar-default .navbar-nav > li > a {
-    color: #777;
-}
-.navbar-default .navbar-nav > li > a:hover,
-.navbar-default .navbar-nav > li > a:focus {
-    color: #333;
-    background-color: transparent;
-}
-.navbar-default .navbar-nav > .active > a,
-.navbar-default .navbar-nav > .active > a:hover,
-.navbar-default .navbar-nav > .active > a:focus {
-    color: #555;
-    background-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .disabled > a,
-.navbar-default .navbar-nav > .disabled > a:hover,
-.navbar-default .navbar-nav > .disabled > a:focus {
-    color: #ccc;
-    background-color: transparent;
-}
-.navbar-default .navbar-toggle {
-    border-color: #ddd;
-}
-.navbar-default .navbar-toggle:hover,
-.navbar-default .navbar-toggle:focus {
-    background-color: #ddd;
-}
-.navbar-default .navbar-toggle .icon-bar {
-    background-color: #888;
-}
-.navbar-default .navbar-collapse,
-.navbar-default .navbar-form {
-    border-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .open > a:hover,
-.navbar-default .navbar-nav > .open > a:focus {
-    color: #555;
-    background-color: #e7e7e7;
-}
-@media (max-width: 767px) {
-    .navbar-default .navbar-nav .open .dropdown-menu > li > a {
-        color: #777;
-    }
-    .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
-    .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
-        color: #333;
-        background-color: transparent;
-    }
-    .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
-    .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
-    .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
-        color: #555;
-        background-color: #e7e7e7;
-    }
-    .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
-    .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
-    .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
-        color: #ccc;
-        background-color: transparent;
-    }
-}
-.navbar-default .navbar-link {
-    color: #777;
-}
-.navbar-default .navbar-link:hover {
-    color: #333;
-}
-.navbar-inverse {
-    background-color: #222;
-    border-color: #080808;
-}
-.navbar-inverse .navbar-brand {
-    color: #999;
-}
-.navbar-inverse .navbar-brand:hover,
-.navbar-inverse .navbar-brand:focus {
-    color: #fff;
-    background-color: transparent;
-}
-.navbar-inverse .navbar-text {
-    color: #999;
-}
-.navbar-inverse .navbar-nav > li > a {
-    color: #999;
-}
-.navbar-inverse .navbar-nav > li > a:hover,
-.navbar-inverse .navbar-nav > li > a:focus {
-    color: #fff;
-    background-color: transparent;
-}
-.navbar-inverse .navbar-nav > .active > a,
-.navbar-inverse .navbar-nav > .active > a:hover,
-.navbar-inverse .navbar-nav > .active > a:focus {
-    color: #fff;
-    background-color: #080808;
-}
-.navbar-inverse .navbar-nav > .disabled > a,
-.navbar-inverse .navbar-nav > .disabled > a:hover,
-.navbar-inverse .navbar-nav > .disabled > a:focus {
-    color: #444;
-    background-color: transparent;
-}
-.navbar-inverse .navbar-toggle {
-    border-color: #333;
-}
-.navbar-inverse .navbar-toggle:hover,
-.navbar-inverse .navbar-toggle:focus {
-    background-color: #333;
-}
-.navbar-inverse .navbar-toggle .icon-bar {
-    background-color: #fff;
-}
-.navbar-inverse .navbar-collapse,
-.navbar-inverse .navbar-form {
-    border-color: #101010;
-}
-.navbar-inverse .navbar-nav > .open > a,
-.navbar-inverse .navbar-nav > .open > a:hover,
-.navbar-inverse .navbar-nav > .open > a:focus {
-    color: #fff;
-    backgrou

<TRUNCATED>

[33/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/data/metrics/metric3.json
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/data/metrics/metric3.json b/contrib/views/slider/src/main/resources/ui/app/assets/data/metrics/metric3.json
deleted file mode 100644
index e1bc296..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/data/metrics/metric3.json
+++ /dev/null
@@ -1,1856 +0,0 @@
-{
-  "metrics" : {
-    "dfs" : {
-      "namenode" : {
-        "CreateFileOps" : [
-          [
-            0.0,
-            1401359340
-          ],
-          [
-            0.0,
-            1401359355
-          ],
-          [
-            0.0,
-            1401359370
-          ],
-          [
-            0.0,
-            1401359385
-          ],
-          [
-            0.0,
-            1401359400
-          ],
-          [
-            0.0,
-            1401359415
-          ],
-          [
-            0.0,
-            1401359430
-          ],
-          [
-            0.0,
-            1401359445
-          ],
-          [
-            0.0,
-            1401359460
-          ],
-          [
-            0.0,
-            1401359475
-          ],
-          [
-            0.0,
-            1401359490
-          ],
-          [
-            0.0,
-            1401359505
-          ],
-          [
-            0.0,
-            1401359520
-          ],
-          [
-            0.0,
-            1401359535
-          ],
-          [
-            0.0,
-            1401359550
-          ],
-          [
-            0.0,
-            1401359565
-          ],
-          [
-            0.0,
-            1401359580
-          ],
-          [
-            0.0,
-            1401359595
-          ],
-          [
-            0.0,
-            1401359610
-          ],
-          [
-            0.0,
-            1401359625
-          ],
-          [
-            0.0,
-            1401359640
-          ],
-          [
-            0.0,
-            1401359655
-          ],
-          [
-            0.0,
-            1401359670
-          ],
-          [
-            0.0,
-            1401359685
-          ],
-          [
-            0.0,
-            1401359700
-          ],
-          [
-            0.0,
-            1401359715
-          ],
-          [
-            0.0,
-            1401359730
-          ],
-          [
-            0.0,
-            1401359745
-          ],
-          [
-            0.0,
-            1401359760
-          ],
-          [
-            0.0,
-            1401359775
-          ],
-          [
-            0.0,
-            1401359790
-          ],
-          [
-            0.0,
-            1401359805
-          ],
-          [
-            0.0,
-            1401359820
-          ],
-          [
-            0.0,
-            1401359835
-          ],
-          [
-            0.0,
-            1401359850
-          ],
-          [
-            0.0,
-            1401359865
-          ],
-          [
-            0.0,
-            1401359880
-          ],
-          [
-            0.0,
-            1401359895
-          ],
-          [
-            0.0,
-            1401359910
-          ],
-          [
-            0.0,
-            1401359925
-          ],
-          [
-            0.0,
-            1401359940
-          ],
-          [
-            0.0,
-            1401359955
-          ],
-          [
-            0.0,
-            1401359970
-          ],
-          [
-            0.0,
-            1401359985
-          ],
-          [
-            0.0,
-            1401360000
-          ],
-          [
-            0.0,
-            1401360015
-          ],
-          [
-            0.0,
-            1401360030
-          ],
-          [
-            0.0,
-            1401360045
-          ],
-          [
-            0.0,
-            1401360060
-          ],
-          [
-            0.0,
-            1401360075
-          ],
-          [
-            0.0,
-            1401360090
-          ],
-          [
-            0.0,
-            1401360105
-          ],
-          [
-            0.0,
-            1401360120
-          ],
-          [
-            0.0,
-            1401360135
-          ],
-          [
-            0.0,
-            1401360150
-          ],
-          [
-            0.0,
-            1401360165
-          ],
-          [
-            0.0,
-            1401360180
-          ],
-          [
-            0.0,
-            1401360195
-          ],
-          [
-            0.0,
-            1401360210
-          ],
-          [
-            0.0,
-            1401360225
-          ],
-          [
-            0.0,
-            1401360240
-          ],
-          [
-            0.0,
-            1401360255
-          ],
-          [
-            0.0,
-            1401360270
-          ],
-          [
-            0.0,
-            1401360285
-          ],
-          [
-            0.0,
-            1401360300
-          ],
-          [
-            0.0,
-            1401360315
-          ],
-          [
-            0.0,
-            1401360330
-          ],
-          [
-            0.0,
-            1401360345
-          ],
-          [
-            0.0,
-            1401360360
-          ],
-          [
-            0.0,
-            1401360375
-          ],
-          [
-            0.0,
-            1401360390
-          ],
-          [
-            0.0,
-            1401360405
-          ],
-          [
-            0.0,
-            1401360420
-          ],
-          [
-            0.0,
-            1401360435
-          ],
-          [
-            0.0,
-            1401360450
-          ],
-          [
-            0.0,
-            1401360465
-          ],
-          [
-            0.0,
-            1401360480
-          ],
-          [
-            0.0,
-            1401360495
-          ],
-          [
-            0.0,
-            1401360510
-          ],
-          [
-            0.0,
-            1401360525
-          ],
-          [
-            0.0,
-            1401360540
-          ],
-          [
-            0.0,
-            1401360555
-          ],
-          [
-            0.0,
-            1401360570
-          ],
-          [
-            0.0,
-            1401360585
-          ],
-          [
-            0.0,
-            1401360600
-          ],
-          [
-            0.0,
-            1401360615
-          ],
-          [
-            0.0,
-            1401360630
-          ],
-          [
-            0.0,
-            1401360645
-          ],
-          [
-            0.0,
-            1401360660
-          ],
-          [
-            0.0,
-            1401360675
-          ],
-          [
-            0.0,
-            1401360690
-          ],
-          [
-            0.0,
-            1401360705
-          ],
-          [
-            0.0,
-            1401360720
-          ],
-          [
-            0.0,
-            1401360735
-          ],
-          [
-            0.0,
-            1401360750
-          ],
-          [
-            0.0,
-            1401360765
-          ],
-          [
-            0.0,
-            1401360780
-          ],
-          [
-            0.0,
-            1401360795
-          ],
-          [
-            0.0,
-            1401360810
-          ],
-          [
-            0.0,
-            1401360825
-          ],
-          [
-            0.0,
-            1401360840
-          ],
-          [
-            0.0,
-            1401360855
-          ],
-          [
-            0.0,
-            1401360870
-          ],
-          [
-            0.0,
-            1401360885
-          ],
-          [
-            0.0,
-            1401360900
-          ],
-          [
-            0.0,
-            1401360915
-          ],
-          [
-            0.0,
-            1401360930
-          ],
-          [
-            0.0,
-            1401360945
-          ],
-          [
-            0.0,
-            1401360960
-          ],
-          [
-            0.0,
-            1401360975
-          ],
-          [
-            0.0,
-            1401360990
-          ],
-          [
-            0.0,
-            1401361005
-          ],
-          [
-            0.0,
-            1401361020
-          ],
-          [
-            0.0,
-            1401361035
-          ],
-          [
-            0.0,
-            1401361050
-          ],
-          [
-            0.0,
-            1401361065
-          ],
-          [
-            0.0,
-            1401361080
-          ],
-          [
-            0.0,
-            1401361095
-          ],
-          [
-            0.0,
-            1401361110
-          ],
-          [
-            0.0,
-            1401361125
-          ],
-          [
-            0.0,
-            1401361140
-          ],
-          [
-            0.0,
-            1401361155
-          ],
-          [
-            0.0,
-            1401361170
-          ],
-          [
-            0.0,
-            1401361185
-          ],
-          [
-            0.0,
-            1401361200
-          ],
-          [
-            0.0,
-            1401361215
-          ],
-          [
-            0.0,
-            1401361230
-          ],
-          [
-            0.0,
-            1401361245
-          ],
-          [
-            0.0,
-            1401361260
-          ],
-          [
-            0.0,
-            1401361275
-          ],
-          [
-            0.0,
-            1401361290
-          ],
-          [
-            0.0,
-            1401361305
-          ],
-          [
-            0.0,
-            1401361320
-          ],
-          [
-            0.0,
-            1401361335
-          ],
-          [
-            0.0,
-            1401361350
-          ],
-          [
-            0.0,
-            1401361365
-          ],
-          [
-            0.0,
-            1401361380
-          ],
-          [
-            0.0,
-            1401361395
-          ],
-          [
-            0.0,
-            1401361410
-          ],
-          [
-            0.0,
-            1401361425
-          ],
-          [
-            0.0,
-            1401361440
-          ],
-          [
-            0.0,
-            1401361455
-          ],
-          [
-            0.0,
-            1401361470
-          ],
-          [
-            0.0,
-            1401361485
-          ],
-          [
-            0.0,
-            1401361500
-          ],
-          [
-            0.0,
-            1401361515
-          ],
-          [
-            0.0,
-            1401361530
-          ],
-          [
-            0.0,
-            1401361545
-          ],
-          [
-            0.0,
-            1401361560
-          ],
-          [
-            0.0,
-            1401361575
-          ],
-          [
-            0.0,
-            1401361590
-          ],
-          [
-            0.0,
-            1401361605
-          ],
-          [
-            0.0,
-            1401361620
-          ],
-          [
-            0.0,
-            1401361635
-          ],
-          [
-            0.0,
-            1401361650
-          ],
-          [
-            0.0,
-            1401361665
-          ],
-          [
-            0.0,
-            1401361680
-          ],
-          [
-            0.0,
-            1401361695
-          ],
-          [
-            0.0,
-            1401361710
-          ],
-          [
-            0.0,
-            1401361725
-          ],
-          [
-            0.0,
-            1401361740
-          ],
-          [
-            0.0,
-            1401361755
-          ],
-          [
-            0.0,
-            1401361770
-          ],
-          [
-            0.0,
-            1401361785
-          ],
-          [
-            0.0,
-            1401361800
-          ],
-          [
-            0.0,
-            1401361815
-          ],
-          [
-            0.0,
-            1401361830
-          ],
-          [
-            0.0,
-            1401361845
-          ],
-          [
-            0.0,
-            1401361860
-          ],
-          [
-            0.0,
-            1401361875
-          ],
-          [
-            0.0,
-            1401361890
-          ],
-          [
-            0.0,
-            1401361905
-          ],
-          [
-            0.0,
-            1401361920
-          ],
-          [
-            0.0,
-            1401361935
-          ],
-          [
-            0.08,
-            1401361950
-          ],
-          [
-            0.0533333333333,
-            1401361965
-          ],
-          [
-            0.0,
-            1401361980
-          ],
-          [
-            0.0,
-            1401361995
-          ],
-          [
-            0.0,
-            1401362010
-          ],
-          [
-            0.0,
-            1401362025
-          ],
-          [
-            0.0,
-            1401362040
-          ],
-          [
-            0.0,
-            1401362055
-          ],
-          [
-            0.0,
-            1401362070
-          ],
-          [
-            0.0,
-            1401362085
-          ],
-          [
-            0.0,
-            1401362100
-          ],
-          [
-            0.0,
-            1401362115
-          ],
-          [
-            0.0,
-            1401362130
-          ],
-          [
-            0.0,
-            1401362145
-          ],
-          [
-            0.0,
-            1401362160
-          ],
-          [
-            0.0,
-            1401362175
-          ],
-          [
-            0.0,
-            1401362190
-          ],
-          [
-            0.0,
-            1401362205
-          ],
-          [
-            0.0,
-            1401362220
-          ],
-          [
-            0.0,
-            1401362235
-          ],
-          [
-            0.0,
-            1401362250
-          ],
-          [
-            0.0,
-            1401362265
-          ],
-          [
-            0.0,
-            1401362280
-          ],
-          [
-            0.0,
-            1401362295
-          ],
-          [
-            0.0,
-            1401362310
-          ],
-          [
-            0.0,
-            1401362325
-          ],
-          [
-            0.0,
-            1401362340
-          ],
-          [
-            0.0,
-            1401362355
-          ],
-          [
-            0.0,
-            1401362370
-          ],
-          [
-            0.0,
-            1401362385
-          ],
-          [
-            0.0,
-            1401362400
-          ],
-          [
-            0.0,
-            1401362415
-          ],
-          [
-            0.0,
-            1401362430
-          ],
-          [
-            0.0,
-            1401362445
-          ],
-          [
-            0.0,
-            1401362460
-          ],
-          [
-            0.0,
-            1401362475
-          ],
-          [
-            0.0,
-            1401362490
-          ],
-          [
-            0.0,
-            1401362505
-          ],
-          [
-            0.0,
-            1401362520
-          ],
-          [
-            0.0,
-            1401362535
-          ],
-          [
-            0.0,
-            1401362550
-          ],
-          [
-            0.0,
-            1401362565
-          ],
-          [
-            0.0,
-            1401362580
-          ],
-          [
-            0.0,
-            1401362595
-          ],
-          [
-            0.0,
-            1401362610
-          ],
-          [
-            0.0,
-            1401362625
-          ],
-          [
-            0.0,
-            1401362640
-          ],
-          [
-            0.0,
-            1401362655
-          ],
-          [
-            0.0,
-            1401362670
-          ],
-          [
-            0.0,
-            1401362685
-          ]
-        ],
-        "FileInfoOps" : [
-          [
-            0.0,
-            1401359340
-          ],
-          [
-            0.0,
-            1401359355
-          ],
-          [
-            0.0,
-            1401359370
-          ],
-          [
-            0.0,
-            1401359385
-          ],
-          [
-            0.0,
-            1401359400
-          ],
-          [
-            0.0,
-            1401359415
-          ],
-          [
-            0.0,
-            1401359430
-          ],
-          [
-            0.0,
-            1401359445
-          ],
-          [
-            0.0,
-            1401359460
-          ],
-          [
-            0.0,
-            1401359475
-          ],
-          [
-            0.0,
-            1401359490
-          ],
-          [
-            0.0,
-            1401359505
-          ],
-          [
-            0.0177777777778,
-            1401359520
-          ],
-          [
-            0.115555555556,
-            1401359535
-          ],
-          [
-            0.0,
-            1401359550
-          ],
-          [
-            0.0,
-            1401359565
-          ],
-          [
-            0.0,
-            1401359580
-          ],
-          [
-            0.0,
-            1401359595
-          ],
-          [
-            0.0,
-            1401359610
-          ],
-          [
-            0.0,
-            1401359625
-          ],
-          [
-            0.0,
-            1401359640
-          ],
-          [
-            0.0,
-            1401359655
-          ],
-          [
-            0.0,
-            1401359670
-          ],
-          [
-            0.0,
-            1401359685
-          ],
-          [
-            0.0,
-            1401359700
-          ],
-          [
-            0.0,
-            1401359715
-          ],
-          [
-            0.0,
-            1401359730
-          ],
-          [
-            0.0,
-            1401359745
-          ],
-          [
-            0.0,
-            1401359760
-          ],
-          [
-            0.0,
-            1401359775
-          ],
-          [
-            0.0,
-            1401359790
-          ],
-          [
-            0.0,
-            1401359805
-          ],
-          [
-            0.025,
-            1401359820
-          ],
-          [
-            0.108333333333,
-            1401359835
-          ],
-          [
-            0.0,
-            1401359850
-          ],
-          [
-            0.0,
-            1401359865
-          ],
-          [
-            0.0,
-            1401359880
-          ],
-          [
-            0.0,
-            1401359895
-          ],
-          [
-            0.0,
-            1401359910
-          ],
-          [
-            0.0,
-            1401359925
-          ],
-          [
-            0.0,
-            1401359940
-          ],
-          [
-            0.0,
-            1401359955
-          ],
-          [
-            0.0,
-            1401359970
-          ],
-          [
-            0.0,
-            1401359985
-          ],
-          [
-            0.0,
-            1401360000
-          ],
-          [
-            0.0,
-            1401360015
-          ],
-          [
-            0.0,
-            1401360030
-          ],
-          [
-            0.0,
-            1401360045
-          ],
-          [
-            0.0,
-            1401360060
-          ],
-          [
-            0.0,
-            1401360075
-          ],
-          [
-            0.0,
-            1401360090
-          ],
-          [
-            0.0,
-            1401360105
-          ],
-          [
-            0.0,
-            1401360120
-          ],
-          [
-            0.133333333333,
-            1401360135
-          ],
-          [
-            0.0,
-            1401360150
-          ],
-          [
-            0.0,
-            1401360165
-          ],
-          [
-            0.0,
-            1401360180
-          ],
-          [
-            0.0,
-            1401360195
-          ],
-          [
-            0.0,
-            1401360210
-          ],
-          [
-            0.0,
-            1401360225
-          ],
-          [
-            0.0,
-            1401360240
-          ],
-          [
-            0.0,
-            1401360255
-          ],
-          [
-            0.0,
-            1401360270
-          ],
-          [
-            0.0,
-            1401360285
-          ],
-          [
-            0.0,
-            1401360300
-          ],
-          [
-            0.0,
-            1401360315
-          ],
-          [
-            0.0,
-            1401360330
-          ],
-          [
-            0.0,
-            1401360345
-          ],
-          [
-            0.0,
-            1401360360
-          ],
-          [
-            0.0,
-            1401360375
-          ],
-          [
-            0.0,
-            1401360390
-          ],
-          [
-            0.0,
-            1401360405
-          ],
-          [
-            0.108333333333,
-            1401360420
-          ],
-          [
-            0.025,
-            1401360435
-          ],
-          [
-            0.0,
-            1401360450
-          ],
-          [
-            0.0,
-            1401360465
-          ],
-          [
-            0.0,
-            1401360480
-          ],
-          [
-            0.0,
-            1401360495
-          ],
-          [
-            0.0,
-            1401360510
-          ],
-          [
-            0.0,
-            1401360525
-          ],
-          [
-            0.0,
-            1401360540
-          ],
-          [
-            0.0,
-            1401360555
-          ],
-          [
-            0.0,
-            1401360570
-          ],
-          [
-            0.0,
-            1401360585
-          ],
-          [
-            0.0,
-            1401360600
-          ],
-          [
-            0.0,
-            1401360615
-          ],
-          [
-            0.0,
-            1401360630
-          ],
-          [
-            0.0,
-            1401360645
-          ],
-          [
-            0.0,
-            1401360660
-          ],
-          [
-            0.0,
-            1401360675
-          ],
-          [
-            0.0,
-            1401360690
-          ],
-          [
-            0.0,
-            1401360705
-          ],
-          [
-            0.0,
-            1401360720
-          ],
-          [
-            0.12380952381,
-            1401360735
-          ],
-          [
-            0.00952380952381,
-            1401360750
-          ],
-          [
-            0.0,
-            1401360765
-          ],
-          [
-            0.0,
-            1401360780
-          ],
-          [
-            0.0,
-            1401360795
-          ],
-          [
-            0.0,
-            1401360810
-          ],
-          [
-            0.0,
-            1401360825
-          ],
-          [
-            0.0,
-            1401360840
-          ],
-          [
-            0.0,
-            1401360855
-          ],
-          [
-            0.0,
-            1401360870
-          ],
-          [
-            0.0,
-            1401360885
-          ],
-          [
-            0.0,
-            1401360900
-          ],
-          [
-            0.0,
-            1401360915
-          ],
-          [
-            0.0,
-            1401360930
-          ],
-          [
-            0.0,
-            1401360945
-          ],
-          [
-            0.0,
-            1401360960
-          ],
-          [
-            0.0,
-            1401360975
-          ],
-          [
-            0.0,
-            1401360990
-          ],
-          [
-            0.0,
-            1401361005
-          ],
-          [
-            0.0,
-            1401361020
-          ],
-          [
-            0.115555555556,
-            1401361035
-          ],
-          [
-            0.0177777777778,
-            1401361050
-          ],
-          [
-            0.0,
-            1401361065
-          ],
-          [
-            0.0,
-            1401361080
-          ],
-          [
-            0.0,
-            1401361095
-          ],
-          [
-            0.0,
-            1401361110
-          ],
-          [
-            0.0,
-            1401361125
-          ],
-          [
-            0.0,
-            1401361140
-          ],
-          [
-            0.0,
-            1401361155
-          ],
-          [
-            0.0,
-            1401361170
-          ],
-          [
-            0.0,
-            1401361185
-          ],
-          [
-            0.0,
-            1401361200
-          ],
-          [
-            0.0,
-            1401361215
-          ],
-          [
-            0.0,
-            1401361230
-          ],
-          [
-            0.0,
-            1401361245
-          ],
-          [
-            0.0,
-            1401361260
-          ],
-          [
-            0.0,
-            1401361275
-          ],
-          [
-            0.0,
-            1401361290
-          ],
-          [
-            0.0,
-            1401361305
-          ],
-          [
-            0.0888888888889,
-            1401361320
-          ],
-          [
-            0.0444444444444,
-            1401361335
-          ],
-          [
-            0.0,
-            1401361350
-          ],
-          [
-            0.0,
-            1401361365
-          ],
-          [
-            0.0,
-            1401361380
-          ],
-          [
-            0.0,
-            1401361395
-          ],
-          [
-            0.0,
-            1401361410
-          ],
-          [
-            0.0,
-            1401361425
-          ],
-          [
-            0.0,
-            1401361440
-          ],
-          [
-            0.0,
-            1401361455
-          ],
-          [
-            0.0,
-            1401361470
-          ],
-          [
-            0.0,
-            1401361485
-          ],
-          [
-            0.0,
-            1401361500
-          ],
-          [
-            0.0,
-            1401361515
-          ],
-          [
-            0.0,
-            1401361530
-          ],
-          [
-            0.0,
-            1401361545
-          ],
-          [
-            0.0,
-            1401361560
-          ],
-          [
-            0.0,
-            1401361575
-          ],
-          [
-            0.0,
-            1401361590
-          ],
-          [
-            0.0,
-            1401361605
-          ],
-          [
-            0.075,
-            1401361620
-          ],
-          [
-            0.0583333333333,
-            1401361635
-          ],
-          [
-            0.0,
-            1401361650
-          ],
-          [
-            0.0,
-            1401361665
-          ],
-          [
-            0.0,
-            1401361680
-          ],
-          [
-            0.0,
-            1401361695
-          ],
-          [
-            0.0,
-            1401361710
-          ],
-          [
-            0.0,
-            1401361725
-          ],
-          [
-            0.0,
-            1401361740
-          ],
-          [
-            0.0,
-            1401361755
-          ],
-          [
-            0.0,
-            1401361770
-          ],
-          [
-            0.0,
-            1401361785
-          ],
-          [
-            0.0,
-            1401361800
-          ],
-          [
-            0.0,
-            1401361815
-          ],
-          [
-            0.0,
-            1401361830
-          ],
-          [
-            0.0,
-            1401361845
-          ],
-          [
-            0.0,
-            1401361860
-          ],
-          [
-            0.0,
-            1401361875
-          ],
-          [
-            0.0,
-            1401361890
-          ],
-          [
-            0.0,
-            1401361905
-          ],
-          [
-            0.08,
-            1401361920
-          ],
-          [
-            0.0533333333333,
-            1401361935
-          ],
-          [
-            0.24,
-            1401361950
-          ],
-          [
-            0.16,
-            1401361965
-          ],
-          [
-            0.0,
-            1401361980
-          ],
-          [
-            0.0,
-            1401361995
-          ],
-          [
-            0.0,
-            1401362010
-          ],
-          [
-            0.0,
-            1401362025
-          ],
-          [
-            0.0,
-            1401362040
-          ],
-          [
-            0.0,
-            1401362055
-          ],
-          [
-            0.0,
-            1401362070
-          ],
-          [
-            0.0,
-            1401362085
-          ],
-          [
-            0.0,
-            1401362100
-          ],
-          [
-            0.0,
-            1401362115
-          ],
-          [
-            0.0,
-            1401362130
-          ],
-          [
-            0.0,
-            1401362145
-          ],
-          [
-            0.0,
-            1401362160
-          ],
-          [
-            0.0,
-            1401362175
-          ],
-          [
-            0.0,
-            1401362190
-          ],
-          [
-            0.0,
-            1401362205
-          ],
-          [
-            0.106666666667,
-            1401362220
-          ],
-          [
-            0.0266666666667,
-            1401362235
-          ],
-          [
-            0.0,
-            1401362250
-          ],
-          [
-            0.0,
-            1401362265
-          ],
-          [
-            0.0,
-            1401362280
-          ],
-          [
-            0.0,
-            1401362295
-          ],
-          [
-            0.0,
-            1401362310
-          ],
-          [
-            0.0,
-            1401362325
-          ],
-          [
-            0.0,
-            1401362340
-          ],
-          [
-            0.0,
-            1401362355
-          ],
-          [
-            0.0,
-            1401362370
-          ],
-          [
-            0.0,
-            1401362385
-          ],
-          [
-            0.0,
-            1401362400
-          ],
-          [
-            0.0,
-            1401362415
-          ],
-          [
-            0.0,
-            1401362430
-          ],
-          [
-            0.0,
-            1401362445
-          ],
-          [
-            0.0,
-            1401362460
-          ],
-          [
-            0.0,
-            1401362475
-          ],
-          [
-            0.0,
-            1401362490
-          ],
-          [
-            0.0,
-            1401362505
-          ],
-          [
-            0.0,
-            1401362520
-          ],
-          [
-            0.115555555556,
-            1401362535
-          ],
-          [
-            0.0177777777778,
-            1401362550
-          ],
-          [
-            0.0,
-            1401362565
-          ],
-          [
-            0.106666666667,
-            1401362580
-          ],
-          [
-            0.0266666666667,
-            1401362595
-          ],
-          [
-            0.0,
-            1401362610
-          ],
-          [
-            0.0,
-            1401362625
-          ],
-          [
-            0.0,
-            1401362640
-          ],
-          [
-            0.0,
-            1401362655
-          ],
-          [
-            0.0,
-            1401362670
-          ],
-          [
-            0.0,
-            1401362685
-          ],
-          [
-            0.0,
-            1401362700
-          ],
-          [
-            0.0,
-            1401362715
-          ],
-          [
-            0.0,
-            1401362730
-          ],
-          [
-            0.0,
-            1401362745
-          ],
-          [
-            0.0,
-            1401362760
-          ],
-          [
-            0.0,
-            1401362775
-          ],
-          [
-            0.0,
-            1401362790
-          ],
-          [
-            0.0,
-            1401362805
-          ],
-          [
-            0.0888888888889,
-            1401362820
-          ],
-          [
-            0.0444444444444,
-            1401362835
-          ],
-          [
-            0.0,
-            1401362850
-          ],
-          [
-            0.0,
-            1401362865
-          ],
-          [
-            0.0,
-            1401362880
-          ]
-        ]
-      }
-    }
-  }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/data/metrics/metric4.json
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/data/metrics/metric4.json b/contrib/views/slider/src/main/resources/ui/app/assets/data/metrics/metric4.json
deleted file mode 100644
index 5ebaad4..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/data/metrics/metric4.json
+++ /dev/null
@@ -1,968 +0,0 @@
-{
-  "metrics" : {
-    "rpc" : {
-      "RpcQueueTime_avg_time" : [
-        [
-          0.0,
-          1401359595
-        ],
-        [
-          0.0666666666667,
-          1401359610
-        ],
-        [
-          0.933333333333,
-          1401359625
-        ],
-        [
-          0.0333333333333,
-          1401359640
-        ],
-        [
-          0.466666666667,
-          1401359655
-        ],
-        [
-          0.0,
-          1401359670
-        ],
-        [
-          0.0666666666667,
-          1401359685
-        ],
-        [
-          0.933333333333,
-          1401359700
-        ],
-        [
-          0.477777777778,
-          1401359715
-        ],
-        [
-          0.466666666667,
-          1401359730
-        ],
-        [
-          0.933333333333,
-          1401359745
-        ],
-        [
-          0.477777777778,
-          1401359760
-        ],
-        [
-          0.311111111111,
-          1401359775
-        ],
-        [
-          0.0,
-          1401359790
-        ],
-        [
-          0.0,
-          1401359805
-        ],
-        [
-          0.0,
-          1401359820
-        ],
-        [
-          0.0333333333333,
-          1401359835
-        ],
-        [
-          0.216666666667,
-          1401359850
-        ],
-        [
-          0.0,
-          1401359865
-        ],
-        [
-          0.0266666666667,
-          1401359880
-        ],
-        [
-          0.36,
-          1401359895
-        ],
-        [
-          0.8,
-          1401359910
-        ],
-        [
-          0.0,
-          1401359925
-        ],
-        [
-          0.0666666666667,
-          1401359940
-        ],
-        [
-          0.5,
-          1401359955
-        ],
-        [
-          0.5,
-          1401359970
-        ],
-        [
-          0.0,
-          1401359985
-        ],
-        [
-          0.0,
-          1401360000
-        ],
-        [
-          0.5,
-          1401360015
-        ],
-        [
-          0.0,
-          1401360030
-        ],
-        [
-          0.0,
-          1401360045
-        ],
-        [
-          0.0,
-          1401360060
-        ],
-        [
-          0.0,
-          1401360075
-        ],
-        [
-          0.0,
-          1401360090
-        ],
-        [
-          0.0,
-          1401360105
-        ],
-        [
-          0.0,
-          1401360120
-        ],
-        [
-          0.333333333333,
-          1401360135
-        ],
-        [
-          0.5,
-          1401360150
-        ],
-        [
-          0.0333333333333,
-          1401360165
-        ],
-        [
-          0.0,
-          1401360180
-        ],
-        [
-          0.933333333333,
-          1401360195
-        ],
-        [
-          0.422222222222,
-          1401360210
-        ],
-        [
-          0.0444444444444,
-          1401360225
-        ],
-        [
-          0.0,
-          1401360240
-        ],
-        [
-          0.0,
-          1401360255
-        ],
-        [
-          0.433333333333,
-          1401360270
-        ],
-        [
-          0.5,
-          1401360285
-        ],
-        [
-          0.0333333333333,
-          1401360300
-        ],
-        [
-          0.0,
-          1401360315
-        ],
-        [
-          0.0,
-          1401360330
-        ],
-        [
-          0.8,
-          1401360345
-        ],
-        [
-          0.2,
-          1401360360
-        ],
-        [
-          0.0,
-          1401360375
-        ],
-        [
-          0.866666666667,
-          1401360390
-        ],
-        [
-          0.133333333333,
-          1401360405
-        ],
-        [
-          0.0,
-          1401360420
-        ],
-        [
-          0.0,
-          1401360435
-        ],
-        [
-          0.0,
-          1401360450
-        ],
-        [
-          0.0,
-          1401360465
-        ],
-        [
-          0.0,
-          1401360480
-        ],
-        [
-          0.4,
-          1401360495
-        ],
-        [
-          0.9,
-          1401360510
-        ],
-        [
-          1.0,
-          1401360525
-        ],
-        [
-          0.266666666667,
-          1401360540
-        ],
-        [
-          0.0,
-          1401360555
-        ],
-        [
-          0.0,
-          1401360570
-        ],
-        [
-          0.0,
-          1401360585
-        ],
-        [
-          0.0,
-          1401360600
-        ],
-        [
-          0.4,
-          1401360615
-        ],
-        [
-          0.9,
-          1401360630
-        ],
-        [
-          0.2,
-          1401360645
-        ],
-        [
-          0.0,
-          1401360660
-        ],
-        [
-          0.0,
-          1401360675
-        ],
-        [
-          0.0,
-          1401360690
-        ],
-        [
-          0.8,
-          1401360705
-        ],
-        [
-          0.566666666667,
-          1401360720
-        ],
-        [
-          0.0666666666667,
-          1401360735
-        ],
-        [
-          0.0,
-          1401360750
-        ],
-        [
-          0.0,
-          1401360765
-        ],
-        [
-          0.0,
-          1401360780
-        ],
-        [
-          0.0,
-          1401360795
-        ],
-        [
-          0.0,
-          1401360810
-        ],
-        [
-          0.0,
-          1401360825
-        ],
-        [
-          0.0,
-          1401360840
-        ],
-        [
-          0.0,
-          1401360855
-        ],
-        [
-          0.0,
-          1401360870
-        ],
-        [
-          0.733333333333,
-          1401360885
-        ],
-        [
-          0.4,
-          1401360900
-        ],
-        [
-          0.8,
-          1401360915
-        ],
-        [
-          0.266666666667,
-          1401360930
-        ],
-        [
-          0.4,
-          1401360945
-        ],
-        [
-          0.9,
-          1401360960
-        ],
-        [
-          0.2,
-          1401360975
-        ],
-        [
-          0.4,
-          1401360990
-        ],
-        [
-          0.1,
-          1401361005
-        ],
-        [
-          0.0,
-          1401361020
-        ],
-        [
-          0.0,
-          1401361035
-        ],
-        [
-          0.0,
-          1401361050
-        ],
-        [
-          0.0,
-          1401361065
-        ],
-        [
-          0.0,
-          1401361080
-        ],
-        [
-          0.0,
-          1401361095
-        ],
-        [
-          0.0,
-          1401361110
-        ],
-        [
-          0.0,
-          1401361125
-        ],
-        [
-          0.0,
-          1401361140
-        ],
-        [
-          0.0,
-          1401361155
-        ],
-        [
-          0.0,
-          1401361170
-        ],
-        [
-          0.733333333333,
-          1401361185
-        ],
-        [
-          0.333333333333,
-          1401361200
-        ],
-        [
-          0.0,
-          1401361215
-        ],
-        [
-          0.333333333333,
-          1401361230
-        ],
-        [
-          0.866666666667,
-          1401361245
-        ],
-        [
-          0.266666666667,
-          1401361260
-        ],
-        [
-          0.0,
-          1401361275
-        ],
-        [
-          0.733333333333,
-          1401361290
-        ],
-        [
-          0.633333333333,
-          1401361305
-        ],
-        [
-          0.833333333333,
-          1401361320
-        ],
-        [
-          0.333333333333,
-          1401361335
-        ],
-        [
-          0.0,
-          1401361350
-        ],
-        [
-          0.0,
-          1401361365
-        ],
-        [
-          0.183333333333,
-          1401361380
-        ],
-        [
-          0.75,
-          1401361395
-        ],
-        [
-          0.266666666667,
-          1401361410
-        ],
-        [
-          0.666666666667,
-          1401361425
-        ],
-        [
-          0.333333333333,
-          1401361440
-        ],
-        [
-          0.0,
-          1401361455
-        ],
-        [
-          0.6,
-          1401361470
-        ],
-        [
-          0.466666666667,
-          1401361485
-        ],
-        [
-          0.6,
-          1401361500
-        ],
-        [
-          0.4,
-          1401361515
-        ],
-        [
-          0.0,
-          1401361530
-        ],
-        [
-          0.0,
-          1401361545
-        ],
-        [
-          0.0,
-          1401361560
-        ],
-        [
-          0.0,
-          1401361575
-        ],
-        [
-          0.0,
-          1401361590
-        ],
-        [
-          0.0,
-          1401361605
-        ],
-        [
-          0.0,
-          1401361620
-        ],
-        [
-          0.533333333333,
-          1401361635
-        ],
-        [
-          0.4,
-          1401361650
-        ],
-        [
-          0.0,
-          1401361665
-        ],
-        [
-          0.0,
-          1401361680
-        ],
-        [
-          0.0,
-          1401361695
-        ],
-        [
-          0.0,
-          1401361710
-        ],
-        [
-          0.0,
-          1401361725
-        ],
-        [
-          0.0,
-          1401361740
-        ],
-        [
-          0.0,
-          1401361755
-        ],
-        [
-          0.0,
-          1401361770
-        ],
-        [
-          0.0,
-          1401361785
-        ],
-        [
-          0.0,
-          1401361800
-        ],
-        [
-          0.0,
-          1401361815
-        ],
-        [
-          0.666666666667,
-          1401361830
-        ],
-        [
-          0.333333333333,
-          1401361845
-        ],
-        [
-          0.0,
-          1401361860
-        ],
-        [
-          0.0,
-          1401361875
-        ],
-        [
-          0.333333333333,
-          1401361890
-        ],
-        [
-          0.2,
-          1401361905
-        ],
-        [
-          0.6,
-          1401361920
-        ],
-        [
-          0.4,
-          1401361935
-        ],
-        [
-          0.0,
-          1401361950
-        ],
-        [
-          0.0,
-          1401361965
-        ],
-        [
-          0.6,
-          1401361980
-        ],
-        [
-          0.4,
-          1401361995
-        ],
-        [
-          0.0,
-          1401362010
-        ],
-        [
-          0.0,
-          1401362025
-        ],
-        [
-          0.0,
-          1401362040
-        ],
-        [
-          0.0,
-          1401362055
-        ],
-        [
-          0.0,
-          1401362070
-        ],
-        [
-          0.0,
-          1401362085
-        ],
-        [
-          0.666666666667,
-          1401362100
-        ],
-        [
-          0.333333333333,
-          1401362115
-        ],
-        [
-          0.0,
-          1401362130
-        ],
-        [
-          0.0,
-          1401362145
-        ],
-        [
-          0.183333333333,
-          1401362160
-        ],
-        [
-          0.0833333333333,
-          1401362175
-        ],
-        [
-          0.0,
-          1401362190
-        ],
-        [
-          0.0,
-          1401362205
-        ],
-        [
-          0.8,
-          1401362220
-        ],
-        [
-          0.2,
-          1401362235
-        ],
-        [
-          0.0,
-          1401362250
-        ],
-        [
-          0.0,
-          1401362265
-        ],
-        [
-          0.0,
-          1401362280
-        ],
-        [
-          0.0,
-          1401362295
-        ],
-        [
-          0.0,
-          1401362310
-        ],
-        [
-          0.0,
-          1401362325
-        ],
-        [
-          0.0,
-          1401362340
-        ],
-        [
-          0.0,
-          1401362355
-        ],
-        [
-          0.8,
-          1401362370
-        ],
-        [
-          0.2,
-          1401362385
-        ],
-        [
-          0.0,
-          1401362400
-        ],
-        [
-          0.0,
-          1401362415
-        ],
-        [
-          0.366666666667,
-          1401362430
-        ],
-        [
-          0.1,
-          1401362445
-        ],
-        [
-          0.0,
-          1401362460
-        ],
-        [
-          0.0,
-          1401362475
-        ],
-        [
-          0.0,
-          1401362490
-        ],
-        [
-          0.0,
-          1401362505
-        ],
-        [
-          0.288888888889,
-          1401362520
-        ],
-        [
-          0.0444444444444,
-          1401362535
-        ],
-        [
-          0.0,
-          1401362550
-        ],
-        [
-          0.8,
-          1401362565
-        ],
-        [
-          0.2,
-          1401362580
-        ],
-        [
-          0.0,
-          1401362595
-        ],
-        [
-          0.366666666667,
-          1401362610
-        ],
-        [
-          0.133333333333,
-          1401362625
-        ],
-        [
-          0.0,
-          1401362640
-        ],
-        [
-          0.0,
-          1401362655
-        ],
-        [
-          0.0,
-          1401362670
-        ],
-        [
-          0.0,
-          1401362685
-        ],
-        [
-          0.0,
-          1401362700
-        ],
-        [
-          0.0,
-          1401362715
-        ],
-        [
-          0.0,
-          1401362730
-        ],
-        [
-          0.0,
-          1401362745
-        ],
-        [
-          0.6,
-          1401362760
-        ],
-        [
-          0.333333333333,
-          1401362775
-        ],
-        [
-          0.3,
-          1401362790
-        ],
-        [
-          0.166666666667,
-          1401362805
-        ],
-        [
-          0.0,
-          1401362820
-        ],
-        [
-          0.0,
-          1401362835
-        ],
-        [
-          0.0,
-          1401362850
-        ],
-        [
-          0.0,
-          1401362865
-        ],
-        [
-          0.0,
-          1401362880
-        ],
-        [
-          0.0,
-          1401362895
-        ],
-        [
-          0.0,
-          1401362910
-        ],
-        [
-          0.0,
-          1401362925
-        ],
-        [
-          0.0,
-          1401362940
-        ],
-        [
-          0.0,
-          1401362955
-        ],
-        [
-          0.0,
-          1401362970
-        ],
-        [
-          0.0,
-          1401362985
-        ],
-        [
-          0.666666666667,
-          1401363000
-        ],
-        [
-          0.266666666667,
-          1401363015
-        ],
-        [
-          0.0,
-          1401363030
-        ],
-        [
-          0.0,
-          1401363045
-        ],
-        [
-          0.166666666667,
-          1401363060
-        ],
-        [
-          0.0833333333333,
-          1401363075
-        ],
-        [
-          0.0,
-          1401363090
-        ],
-        [
-          0.0,
-          1401363105
-        ],
-        [
-          0.0,
-          1401363120
-        ],
-        [
-          0.0,
-          1401363135
-        ],
-        [
-          0.166666666667,
-          1401363150
-        ],
-        [
-          0.0833333333333,
-          1401363165
-        ],
-        [
-          0.222222222222,
-          1401363180
-        ]
-      ]
-    }
-  }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/empty_json.json
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/empty_json.json b/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/empty_json.json
deleted file mode 100644
index 0967ef4..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/empty_json.json
+++ /dev/null
@@ -1 +0,0 @@
-{}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/slider-properties-2.json
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/slider-properties-2.json b/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/slider-properties-2.json
deleted file mode 100644
index 0966e56..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/slider-properties-2.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  "version": "1.0.0",
-  "validations": [],
-  "parameters": {
-    "ganglia.server.hostname": "c6401.ambari.apache.org",
-    "ganglia.additional.clusters": "App1:8881,App2:8882",
-    "yarn.rm.webapp.url":"c6402.ambari.apache.org:8088"
-  }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/slider-properties.json
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/slider-properties.json b/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/slider-properties.json
deleted file mode 100644
index 4b55dfa..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/slider-properties.json
+++ /dev/null
@@ -1,148 +0,0 @@
-{
-  "href" : "http://host:8080/api/v1/views/SLIDER/versions/1.0.0/instances/s1",
-  "ViewInstanceInfo" : {
-    "context_path" : "/views/SLIDER/1.0.0/s1",
-    "description" : "description s1",
-    "icon64_path" : null,
-    "icon_path" : null,
-    "instance_name" : "s1",
-    "label" : "display s1",
-    "static" : false,
-    "version" : "1.0.0",
-    "view_name" : "SLIDER",
-    "visible" : true,
-    "instance_data" : {
-      "dfs.http.policy" : "HTTP_ONLY",
-      "fs.defaultFS" : "hdfs://host1:8020",
-      "fs.trash.interval" : "360",
-      "ganglia.additional.clusters" : "accumulo:8668",
-      "ganglia.server.hostname" : "host2",
-      "hadoop.proxyuser.falcon.groups" : "users",
-      "hadoop.proxyuser.falcon.hosts" : "*",
-      "hadoop.security.auth_to_local" : "\n        RULE:[2:$1@$0]([rn]m@.*)s/.*/yarn/\n        RULE:[2:$1@$0](jhs@.*)s/.*/mapred/\n        RULE:[2:$1@$0]([nd]n@.*)s/.*/hdfs/\n        RULE:[2:$1@$0](hm@.*)s/.*/hbase/\n        RULE:[2:$1@$0](rs@.*)s/.*/hbase/\n        DEFAULT",
-      "hadoop.security.authentication" : "simple",
-      "hadoop.security.authorization" : "false",
-      "io.compression.codecs" : "org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec",
-      "io.file.buffer.size" : "131072",
-      "io.serializations" : "org.apache.hadoop.io.serializer.WritableSerialization",
-      "ipc.client.connect.max.retries" : "50",
-      "ipc.client.connection.maxidletime" : "30000",
-      "ipc.client.idlethreshold" : "8000",
-      "ipc.server.tcpnodelay" : "true",
-      "mapreduce.jobtracker.webinterface.trusted" : "false",
-      "security_enabled" : "false",
-      "slider.zookeeper.quorum" : "host1:2181,host2:2181,host3:2181",
-      "yarn.acl.enable" : "false",
-      "yarn.admin.acl" : "",
-      "yarn.application.classpath" : "/etc/hadoop/conf,/usr/hdp/current/hadoop/*,/usr/hdp/current/hadoop/lib/*,/usr/hdp/current/hadoop-hdfs/*,/usr/hdp/current/hadoop-hdfs/lib/*,/usr/hdp/current/hadoop-yarn/*,/usr/hdp/current/hadoop-yarn/lib/*,/usr/hdp/current/hadoop-mapreduce/*,/usr/hdp/current/hadoop-mapreduce/lib/*",
-      "yarn.log-aggregation-enable" : "true",
-      "yarn.log-aggregation.retain-seconds" : "2592000",
-      "yarn.log.server.url" : "http://host2:19888/jobhistory/logs",
-      "yarn.nodemanager.address" : "0.0.0.0:45454",
-      "yarn.nodemanager.admin-env" : "MALLOC_ARENA_MAX=$MALLOC_ARENA_MAX",
-      "yarn.nodemanager.aux-services" : "mapreduce_shuffle",
-      "yarn.nodemanager.aux-services.mapreduce_shuffle.class" : "org.apache.hadoop.mapred.ShuffleHandler",
-      "yarn.nodemanager.container-executor.class" : "org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor",
-      "yarn.nodemanager.container-monitor.interval-ms" : "3000",
-      "yarn.nodemanager.delete.debug-delay-sec" : "0",
-      "yarn.nodemanager.disk-health-checker.min-healthy-disks" : "0.25",
-      "yarn.nodemanager.health-checker.interval-ms" : "135000",
-      "yarn.nodemanager.health-checker.script.timeout-ms" : "60000",
-      "yarn.nodemanager.linux-container-executor.group" : "hadoop",
-      "yarn.nodemanager.local-dirs" : "/hadoop/yarn/local",
-      "yarn.nodemanager.log-aggregation.compression-type" : "gz",
-      "yarn.nodemanager.log-dirs" : "/hadoop/yarn/log",
-      "yarn.nodemanager.log.retain-second" : "604800",
-      "yarn.nodemanager.remote-app-log-dir" : "/app-logs",
-      "yarn.nodemanager.remote-app-log-dir-suffix" : "logs",
-      "yarn.nodemanager.resource.memory-mb" : "2048",
-      "yarn.nodemanager.vmem-check-enabled" : "false",
-      "yarn.nodemanager.vmem-pmem-ratio" : "2.1",
-      "yarn.resourcemanager.address" : "host2:8050",
-      "yarn.resourcemanager.admin.address" : "host2:8141",
-      "yarn.resourcemanager.am.max-attempts" : "2",
-      "yarn.resourcemanager.hostname" : "host2",
-      "yarn.resourcemanager.nodes.exclude-path" : "/etc/hadoop/conf/yarn.exclude",
-      "yarn.resourcemanager.resource-tracker.address" : "host2:8025",
-      "yarn.resourcemanager.scheduler.address" : "host2:8030",
-      "yarn.resourcemanager.scheduler.class" : "org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler",
-      "yarn.resourcemanager.webapp.address" : "host2:8088",
-      "yarn.scheduler.maximum-allocation-mb" : "2048",
-      "yarn.scheduler.minimum-allocation-mb" : "682",
-      "yarn.timeline-service.address" : "host2:10200",
-      "yarn.timeline-service.enabled" : "true",
-      "yarn.timeline-service.generic-application-history.store-class" : "org.apache.hadoop.yarn.server.applicationhistoryservice.NullApplicationHistoryStore",
-      "yarn.timeline-service.leveldb-timeline-store.path" : "/hadoop/yarn/timeline",
-      "yarn.timeline-service.leveldb-timeline-store.ttl-interval-ms" : "300000",
-      "yarn.timeline-service.store-class" : "org.apache.hadoop.yarn.server.timeline.LeveldbTimelineStore",
-      "yarn.timeline-service.ttl-enable" : "true",
-      "yarn.timeline-service.ttl-ms" : "2678400000",
-      "yarn.timeline-service.webapp.address" : "host2:8188",
-      "yarn.timeline-service.webapp.https.address" : "host2:8190"
-    },
-    "properties" : {
-      "ambari.server.password" : "admin",
-      "ambari.server.url" : "http://host:8080/api/v1/clusters/tdk",
-      "ambari.server.username" : "admin",
-      "slider.user" : "admin",
-      "view.kerberos.principal" : null,
-      "view.kerberos.principal.keytab" : null
-    }
-  },
-  "resources" : [
-    {
-      "href" : "http://host:8080/api/v1/views/SLIDER/versions/1.0.0/instances/s1/resources/status",
-      "instance_name" : "s1",
-      "name" : "status",
-      "version" : "1.0.0",
-      "view_name" : "SLIDER"
-    }
-  ],
-  "apps" : [
-    {
-      "href" : "http://host:8080/api/v1/views/SLIDER/versions/1.0.0/instances/s1/apps/1412670918370_1",
-      "id" : "1412670918370_1",
-      "instance_name" : "s1",
-      "version" : "1.0.0",
-      "view_name" : "SLIDER"
-    },
-    {
-      "href" : "http://host:8080/api/v1/views/SLIDER/versions/1.0.0/instances/s1/apps/1412670918370_2",
-      "id" : "1412670918370_2",
-      "instance_name" : "s1",
-      "version" : "1.0.0",
-      "view_name" : "SLIDER"
-    },
-    {
-      "href" : "http://host:8080/api/v1/views/SLIDER/versions/1.0.0/instances/s1/apps/1412670918370_3",
-      "id" : "1412670918370_3",
-      "instance_name" : "s1",
-      "version" : "1.0.0",
-      "view_name" : "SLIDER"
-    }
-  ],
-  "privileges" : [ ],
-  "apptypes" : [
-    {
-      "href" : "http://host:8080/api/v1/views/SLIDER/versions/1.0.0/instances/s1/apptypes/ACCUMULO",
-      "id" : "ACCUMULO",
-      "instance_name" : "s1",
-      "version" : "1.0.0",
-      "view_name" : "SLIDER"
-    },
-    {
-      "href" : "http://host:8080/api/v1/views/SLIDER/versions/1.0.0/instances/s1/apptypes/HBASE",
-      "id" : "HBASE",
-      "instance_name" : "s1",
-      "version" : "1.0.0",
-      "view_name" : "SLIDER"
-    },
-    {
-      "href" : "http://host:8080/api/v1/views/SLIDER/versions/1.0.0/instances/s1/apptypes/STORM",
-      "id" : "STORM",
-      "instance_name" : "s1",
-      "version" : "1.0.0",
-      "view_name" : "SLIDER"
-    }
-  ]
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/status_false.json
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/status_false.json b/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/status_false.json
deleted file mode 100644
index 62a4354..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/status_false.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "version": "0.0.1-SNAPSHOT",
-  "viewEnabled": false,
-  "viewErrors": [
-    "Slider applications view requires HDFS service to be started",
-    "Slider applications view requires YARN, HDFS and ZooKeeper services to bestarted."
-  ]
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/status_true.json
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/status_true.json b/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/status_true.json
deleted file mode 100644
index 409bb2f..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/status_true.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "version": "0.0.1-SNAPSHOT",
-  "viewEnabled": true,
-  "viewErrors": []
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/favicon.ico
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/favicon.ico b/contrib/views/slider/src/main/resources/ui/app/assets/favicon.ico
deleted file mode 100755
index be74abd..0000000
Binary files a/contrib/views/slider/src/main/resources/ui/app/assets/favicon.ico and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/font/fontawesome-webfont.eot
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/font/fontawesome-webfont.eot b/contrib/views/slider/src/main/resources/ui/app/assets/font/fontawesome-webfont.eot
deleted file mode 100644
index 0662cb9..0000000
Binary files a/contrib/views/slider/src/main/resources/ui/app/assets/font/fontawesome-webfont.eot and /dev/null differ


[39/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewControllerImpl.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewControllerImpl.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewControllerImpl.java
deleted file mode 100644
index 30bc2b0..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewControllerImpl.java
+++ /dev/null
@@ -1,1510 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.UndeclaredThrowableException;
-import java.net.URI;
-import java.security.PrivilegedExceptionAction;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.regex.Pattern;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipException;
-
-import org.apache.ambari.view.ViewContext;
-import org.apache.ambari.view.slider.ViewStatus.Validation;
-import org.apache.ambari.view.slider.clients.AmbariCluster;
-import org.apache.ambari.view.slider.clients.AmbariClusterInfo;
-import org.apache.ambari.view.slider.clients.AmbariHostComponent;
-import org.apache.ambari.view.slider.clients.AmbariService;
-import org.apache.ambari.view.slider.clients.AmbariServiceInfo;
-import org.apache.ambari.view.slider.rest.client.AmbariHttpClient;
-import org.apache.ambari.view.slider.rest.client.Metric;
-import org.apache.ambari.view.slider.rest.client.SliderAppMasterClient;
-import org.apache.ambari.view.slider.rest.client.SliderAppMasterClient.SliderAppMasterData;
-import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
-import org.apache.commons.compress.archivers.zip.ZipFile;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.filefilter.RegexFileFilter;
-import org.apache.commons.lang.StringUtils;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.hdfs.HdfsConfiguration;
-import org.apache.hadoop.security.UserGroupInformation;
-import org.apache.hadoop.yarn.api.records.ApplicationId;
-import org.apache.hadoop.yarn.api.records.ApplicationReport;
-import org.apache.hadoop.yarn.api.records.YarnApplicationState;
-import org.apache.hadoop.yarn.conf.YarnConfiguration;
-import org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException;
-import org.apache.hadoop.yarn.exceptions.YarnException;
-import org.apache.slider.api.ClusterDescription;
-import org.apache.slider.client.SliderClient;
-import org.apache.slider.common.params.ActionCreateArgs;
-import org.apache.slider.common.params.ActionFlexArgs;
-import org.apache.slider.common.params.ActionFreezeArgs;
-import org.apache.slider.common.params.ActionInstallKeytabArgs;
-import org.apache.slider.common.params.ActionInstallPackageArgs;
-import org.apache.slider.common.params.ActionThawArgs;
-import org.apache.slider.common.tools.SliderUtils;
-import org.apache.slider.core.exceptions.SliderException;
-import org.apache.slider.core.exceptions.UnknownApplicationInstanceException;
-import org.apache.slider.core.main.LauncherExitCodes;
-import org.apache.slider.providers.agent.application.metadata.Application;
-import org.apache.slider.providers.agent.application.metadata.Component;
-import org.apache.slider.providers.agent.application.metadata.Metainfo;
-import org.apache.slider.providers.agent.application.metadata.MetainfoParser;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.type.TypeReference;
-
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import com.google.gson.JsonPrimitive;
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Singleton
-public class SliderAppsViewControllerImpl implements SliderAppsViewController {
-  private static final Logger logger = LoggerFactory
-      .getLogger(SliderAppsViewControllerImpl.class);
-  private static String METRICS_PREFIX = "metrics/";
-  @Inject
-  private ViewContext viewContext;
-  private List<SliderAppType> appTypes;
-  private Integer createAppCounter = -1;
-  @Inject
-  private SliderAppsAlerts sliderAlerts;
-  private Map<String, MetricsHolder> appMetrics = new HashMap<String, MetricsHolder>();
-
-  private String getAppsFolderPath() {
-    return viewContext.getAmbariProperty("resources.dir") + "/apps";
-  }
-
-  private String getAppsCreateFolderPath() {
-    return getAppsFolderPath() + "/create";
-  }
-
-  @Override
-  public ViewStatus getViewStatus() {
-    ViewStatus status = new ViewStatus();
-    Map<String, String> newHadoopConfigs = new HashMap<String, String>();
-    status.setVersion(SliderAppsConfiguration.INSTANCE.getVersion());
-    String ambariCluster = getViewParameterValue(PARAM_AMBARI_CLUSTER_API);
-    String ambariUsername = getViewParameterValue(PARAM_AMBARI_USERNAME);
-    String ambariPassword = getViewParameterValue(PARAM_AMBARI_PASSWORD);
-    if (ambariCluster != null && ambariUsername != null
-        && ambariPassword != null && ambariCluster.trim().length() > 0
-        && ambariUsername.trim().length() > 0
-        && ambariPassword.trim().length() > 0) {
-      String APIPREFIX = "/api/v1/clusters/";
-      int index = ambariCluster.indexOf(APIPREFIX);
-      if (index > 0) {
-        String ambariUrl = ambariCluster.substring(0, index);
-        String clusterName = ambariCluster
-            .substring(index + APIPREFIX.length());
-        if (clusterName.endsWith("/")) {
-          clusterName = clusterName.substring(0, clusterName.length() - 1);
-        }
-        AmbariHttpClient ambariClient = new AmbariHttpClient(ambariUrl,
-            ambariUsername, ambariPassword, viewContext);
-        try {
-          AmbariClusterInfo clusterInfo = ambariClient.getClusterInfo();
-          if (clusterInfo!=null && clusterName.equals(clusterInfo.getName())) {
-            AmbariCluster cluster = ambariClient.getCluster(clusterInfo);
-            AmbariServiceInfo hdfsServiceInfo = null;
-            AmbariServiceInfo yarnServiceInfo = null;
-            // Validate stack-version
-            Validation validateStackVersion = validateStackVersion(clusterInfo.getVersion());
-            if (validateStackVersion != null) {
-              status.getValidations().add(validateStackVersion);
-            }
-            for (AmbariServiceInfo svc : cluster.getServices()) {
-              if ("HDFS".equals(svc.getId())) {
-                hdfsServiceInfo = svc;
-              } else if ("YARN".equals(svc.getId())) {
-                yarnServiceInfo = svc;
-              }
-            }
-            // HDFS
-            if (hdfsServiceInfo != null) {
-              if (!hdfsServiceInfo.isStarted()) {
-                status.getValidations().add(
-                    new ViewStatus.Validation("HDFS service is not started"));
-              }
-            } else {
-              status.getValidations().add(
-                  new ViewStatus.Validation("HDFS service is not installed"));
-            }
-            // YARN
-            if (yarnServiceInfo != null) {
-              if (!yarnServiceInfo.isStarted()) {
-                status.getValidations().add(
-                    new ViewStatus.Validation("YARN service is not started"));
-              }
-            } else {
-              status.getValidations().add(
-                  new ViewStatus.Validation("YARN service is not installed"));
-            }
-            // JAVA_HOME
-            Map<String, String> ambariServerConfigs = ambariClient.getAmbariServerConfigs();
-            if (ambariServerConfigs.containsKey("java.home")) {
-              newHadoopConfigs.put("java.home", ambariServerConfigs.get("java.home"));
-              status.getParameters().put(PROPERTY_JAVA_HOME, ambariServerConfigs.get("java.home"));
-            }
-            // Configs
-            if (cluster.getDesiredConfigs().containsKey("core-site")) {
-              Map<String, String> coreSiteConfigs = ambariClient
-                  .getConfiguration(cluster, "core-site", cluster
-                      .getDesiredConfigs().get("core-site"));
-              newHadoopConfigs.putAll(coreSiteConfigs);
-            }
-            if (cluster.getDesiredConfigs().containsKey("cluster-env")) {
-              Map<String, String> clusterEnvConfigs = ambariClient
-                  .getConfiguration(cluster, "cluster-env", cluster
-                      .getDesiredConfigs().get("cluster-env"));
-              newHadoopConfigs.put("security_enabled",
-                  clusterEnvConfigs.get("security_enabled"));
-            }
-            if (cluster.getDesiredConfigs().containsKey("hdfs-site")) {
-              Map<String, String> hdfsSiteConfigs = ambariClient
-                  .getConfiguration(cluster, "hdfs-site", cluster
-                      .getDesiredConfigs().get("hdfs-site"));
-              newHadoopConfigs.putAll(hdfsSiteConfigs);
-            }
-            if (cluster.getDesiredConfigs().containsKey("yarn-site")) {
-              Map<String, String> yarnSiteConfigs = ambariClient
-                  .getConfiguration(cluster, "yarn-site", cluster
-                      .getDesiredConfigs().get("yarn-site"));
-              newHadoopConfigs.putAll(yarnSiteConfigs);
-              status.getParameters().put(PROPERTY_YARN_RM_WEBAPP_URL,
-                  newHadoopConfigs.get("yarn.resourcemanager.webapp.address"));
-            }
-            if (cluster.getDesiredConfigs().containsKey("yarn-env")) {
-              Map<String, String> yarnEnvConfigs = ambariClient.getConfiguration(cluster, "yarn-env", cluster
-                  .getDesiredConfigs().get("yarn-env"));
-              String yarnUser = yarnEnvConfigs.get("yarn_user");
-              if (yarnUser == null || yarnUser.trim().length() < 1) {
-                yarnUser = "yarn";
-              }
-              newHadoopConfigs.put("yarn_user", yarnUser); // YARN service user
-            }
-            newHadoopConfigs.put("slider.user", getUserToRunAs(newHadoopConfigs)); // Slider user
-            status.getParameters().put(PROPERTY_SLIDER_USER, newHadoopConfigs.get("slider.user"));
-            if (newHadoopConfigs.containsKey("security_enabled")) {
-              boolean securityEnabled = Boolean.valueOf(newHadoopConfigs.get("security_enabled"));
-              if (securityEnabled) {
-                String yarnUser = newHadoopConfigs.get("yarn_user");
-                if (yarnUser != null && yarnUser.equals(newHadoopConfigs.get("slider.user"))) {
-                  status.getValidations().add(
-                      new ViewStatus.Validation("Slider view does not support accessing secured YARN cluster as YARN superuser (" + yarnUser + ")"));
-                }
-              }
-            }
-            if (cluster.getDesiredConfigs().containsKey("zoo.cfg")) {
-              Map<String, String> zkEnvConfigs = ambariClient.getConfiguration(
-                  cluster, "zoo.cfg",
-                  cluster.getDesiredConfigs().get("zoo.cfg"));
-              StringBuilder zkQuorumBuilder = new StringBuilder();
-              String port = zkEnvConfigs.get("clientPort");
-              AmbariService zkService = ambariClient.getService(cluster,
-                  "ZOOKEEPER");
-              if (zkService != null) {
-                List<AmbariHostComponent> hostsList = zkService
-                    .getComponentsToHostComponentsMap().get("ZOOKEEPER_SERVER");
-                int count = 1;
-                for (AmbariHostComponent host : hostsList) {
-                  zkQuorumBuilder.append(host.getHostName() + ":" + port);
-                  if (count++ < hostsList.size()) {
-                    zkQuorumBuilder.append(",");
-                  }
-                }
-                newHadoopConfigs.put(PROPERTY_SLIDER_ZK_QUORUM,
-                    zkQuorumBuilder.toString());
-              } else {
-                status.getValidations().add(
-                    new ViewStatus.Validation(
-                        "ZooKeeper service is not installed"));
-              }
-            } else {
-              status.getValidations()
-              .add(
-                  new ViewStatus.Validation(
-                      "ZooKeeper service is not installed"));
-            }
-            if (cluster.getDesiredConfigs().containsKey("ams-site")) {
-              Map<String, String> amsConfigs = ambariClient.getConfiguration(cluster, "ams-site", cluster.getDesiredConfigs().get("ams-site"));
-              AmbariService amsService = ambariClient.getService(cluster, "AMBARI_METRICS");
-              // TODO add metrics collector HA support
-              List<AmbariHostComponent> hostsList = amsService.getComponentsToHostComponentsMap().get("METRICS_COLLECTOR");
-              if (hostsList != null && hostsList.size() > 0) {
-                String collectorHostName = hostsList.get(0).getHostName();
-                newHadoopConfigs.put(PROPERTY_METRICS_SERVER_HOSTNAME, collectorHostName);
-                status.getParameters().put(PROPERTY_METRICS_SERVER_HOSTNAME, collectorHostName);
-              }
-              if (amsConfigs != null && amsConfigs.containsKey("timeline.metrics.service.webapp.address")) {
-                String portString = amsConfigs.get("timeline.metrics.service.webapp.address");
-                int sepIndex = portString.indexOf(':');
-                if (sepIndex > -1) {
-                  portString = portString.substring(sepIndex + 1);
-                }
-                newHadoopConfigs.put(PROPERTY_METRICS_SERVER_PORT, portString);
-                status.getParameters().put(PROPERTY_METRICS_SERVER_PORT, portString);
-              }
-              newHadoopConfigs.put(PROPERTY_METRICS_LIBRARY_PATH, "file:///usr/lib/ambari-metrics-hadoop-sink/ambari-metrics-hadoop-sink.jar");
-              status.getParameters().put(PROPERTY_METRICS_LIBRARY_PATH, "file:///usr/lib/ambari-metrics-hadoop-sink/ambari-metrics-hadoop-sink.jar");
-            }
-            Validation validateHDFSAccess = validateHDFSAccess(newHadoopConfigs, hdfsServiceInfo);
-            if (validateHDFSAccess != null) {
-              status.getValidations().add(validateHDFSAccess);
-            }
-          } else {
-            status.getValidations().add(
-                new ViewStatus.Validation("Ambari cluster with ID ["
-                    + clusterName + "] was not found on Ambari server"));
-          }
-        } catch (Throwable e) {
-          logger.error("Exception determining view status", e);
-          String message = e.getClass().getName() + ": " + e.getMessage();
-          if (e instanceof RuntimeException && e.getCause() != null) {
-            message = e.getCause().getClass().getName() + ": " + e.getMessage();
-          }
-          message = String.format("Unable to initialize Slider view: %s", message);
-          status.getValidations().add(new ViewStatus.Validation(message));
-        }
-      } else {
-        status
-            .getValidations()
-            .add(
-                new ViewStatus.Validation(
-                    "Ambari server cluster API URL should include cluster name, for example http://ambari.server:8080/api/v1/clusters/c1"));
-      }
-    } else {
-      status.getValidations().add(
-          new ViewStatus.Validation(
-              "View parameters specifying Ambari details required"));
-    }
-    synchronized (viewContext) {
-      if (!newHadoopConfigs.equals(viewContext.getInstanceData())) {
-        Set<String> removeKeys = new HashSet<String>(viewContext.getInstanceData().keySet());
-        for (Entry<String, String> e : newHadoopConfigs.entrySet()) {
-          viewContext.putInstanceData(e.getKey(), e.getValue());
-          removeKeys.remove(e.getKey());
-        }
-        for (String key : removeKeys) {
-          viewContext.removeInstanceData(key);
-        }
-      }
-    }
-    return status;
-  }
-
-  /**
-   * Slider-view supports only some stack-versions. This method validates that the targeted cluster is supported.
-   *
-   * @param clusterVersion
-   * @return
-   */
-  private Validation validateStackVersion(String clusterVersion) {
-    // Assuming cluster versions are of the format "X-a.b.c.d"
-    String stackName = clusterVersion;
-    String stackVersion = clusterVersion;
-    int dashIndex = clusterVersion.indexOf('-');
-    if (dashIndex > -1 && dashIndex < clusterVersion.length() - 1) {
-      stackName = stackName.substring(0, dashIndex);
-      stackVersion = stackVersion.substring(dashIndex + 1);
-    }
-    String[] versionSplits = stackVersion.split("\\.");
-    if (!"HDP".equals(stackName) || versionSplits.length < 2) {
-      return new Validation("Stack version (" + clusterVersion + ") used by cluster is not supported");
-    }
-    try {
-      int majorVersion = Integer.parseInt(versionSplits[0]);
-      int minorVersion = Integer.parseInt(versionSplits[1]);
-      if (!(majorVersion >= 2 && minorVersion >= 2)) {
-        return new Validation("Stack version (" + clusterVersion + ") used by cluster is not supported");
-      }
-    } catch (NumberFormatException e) {
-      return new Validation("Stack version (" + clusterVersion + ") used by cluster is not supported");
-    }
-    return null;
-  }
-
-  private Validation validateHDFSAccess(final Map<String, String> hadoopConfigs, AmbariServiceInfo hdfsServiceInfo) {
-    if (hdfsServiceInfo != null && hdfsServiceInfo.isStarted()) {
-      if (hadoopConfigs.containsKey("fs.defaultFS")) {
-        try {
-          invokeHDFSClientRunnable(new HDFSClientRunnable<Boolean>() {
-            @Override
-            public Boolean run(FileSystem fs) throws IOException, InterruptedException {
-              Path homePath = fs.getHomeDirectory();
-              fs.listFiles(homePath, false);
-              return Boolean.TRUE;
-            }
-          }, hadoopConfigs);
-        } catch (IOException e) {
-          String message;
-          if (hadoopConfigs.get("security_enabled").toLowerCase().equals("true")
-              && (getViewParameterValue(PARAM_VIEW_PRINCIPAL) == null
-              || getViewParameterValue(PARAM_VIEW_PRINCIPAL_KEYTAB) == null)) {
-            message = "Slider View requires access to user's home directory in HDFS to proceed. Please check the kerberos configs";
-          } else {
-          message = "Slider View requires access to user's home directory in HDFS to proceed. Contact your administrator to create the home directory. ("
-              + e.getMessage() + ")";
-          }
-          logger.warn(message, e);
-          return new Validation(message);
-        } catch (InterruptedException e) {
-          String message = "Slider View requires access to user's home directory in HDFS to proceed. Contact your administrator to create the home directory. ("
-              + e.getMessage() + ")";
-          logger.warn(message, e);
-          return new Validation(message);
-        }
-      } else {
-        return new Validation("Location of HDFS filesystem is unknown for verification. Please check the 'fs.defaultFS' config in core-site.xml");
-      }
-    }
-    return null;
-  }
-
-  private String getApplicationIdString(ApplicationId appId) {
-    return Long.toString(appId.getClusterTimestamp()) + "_"
-        + Integer.toString(appId.getId());
-  }
-
-  private ApplicationId getApplicationId(String appIdString) {
-    if (appIdString != null) {
-      int index = appIdString.indexOf('_');
-      if (index > -1 && index < appIdString.length() - 1) {
-        ApplicationId appId = ApplicationId.newInstance(
-            Long.parseLong(appIdString.substring(0, index)),
-            Integer.parseInt(appIdString.substring(index + 1)));
-        return appId;
-      }
-    }
-    return null;
-  }
-
-  private static interface SliderClientContextRunnable<T> {
-    public T run(SliderClient sliderClient) throws YarnException, IOException, InterruptedException;
-  }
-
-  private static interface HDFSClientRunnable<T> {
-    public T run(FileSystem fs) throws IOException, InterruptedException;
-  }
-
-  private String getUserToRunAs() {
-    return getUserToRunAs(getHadoopConfigs());
-  }
-
-  private String getUserToRunAs(Map<String, String> hadoopConfigs) {
-    String user = getViewParameterValue(PARAM_SLIDER_USER);
-    if (user == null || user.trim().length() < 1) {
-      if (hadoopConfigs.containsKey("yarn_user")) {
-        return hadoopConfigs.get("yarn_user");
-      }
-      return "yarn";
-    } else if ("${username}".equals(user)) {
-      return viewContext.getUsername();
-    } else {
-      return user;
-    }
-  }
-
-  private <T> T invokeHDFSClientRunnable(final HDFSClientRunnable<T> runnable, final Map<String, String> hadoopConfigs) throws IOException,
-      InterruptedException {
-    ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
-    Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
-    try {
-      boolean securityEnabled = Boolean.valueOf(hadoopConfigs.get("security_enabled"));
-      final HdfsConfiguration hdfsConfiguration = new HdfsConfiguration();
-      for (Entry<String, String> entry : hadoopConfigs.entrySet()) {
-        hdfsConfiguration.set(entry.getKey(), entry.getValue());
-      }
-      UserGroupInformation.setConfiguration(hdfsConfiguration);
-      UserGroupInformation sliderUser;
-      String loggedInUser = getUserToRunAs(hadoopConfigs);
-      if (securityEnabled) {
-        String viewPrincipal = getViewParameterValue(PARAM_VIEW_PRINCIPAL);
-        String viewPrincipalKeytab = getViewParameterValue(PARAM_VIEW_PRINCIPAL_KEYTAB);
-        UserGroupInformation ambariUser = UserGroupInformation.loginUserFromKeytabAndReturnUGI(viewPrincipal, viewPrincipalKeytab);
-        if (loggedInUser.equals(ambariUser.getShortUserName())) {
-          // HDFS throws exception when caller tries to impresonate themselves.
-          // User: admin@EXAMPLE.COM is not allowed to impersonate admin
-          sliderUser = ambariUser;
-        } else {
-          sliderUser = UserGroupInformation.createProxyUser(loggedInUser, ambariUser);
-        }
-      } else {
-        sliderUser = UserGroupInformation.getBestUGI(null, loggedInUser);
-      }
-      try {
-        T value = sliderUser.doAs(new PrivilegedExceptionAction<T>() {
-          @Override
-          public T run() throws Exception {
-            String fsPath = hadoopConfigs.get("fs.defaultFS");
-            FileSystem fs = FileSystem.get(URI.create(fsPath), hdfsConfiguration);
-            try {
-              return runnable.run(fs);
-            } finally {
-              fs.close();
-            }
-          }
-        });
-        return value;
-      } catch (UndeclaredThrowableException e) {
-        throw e;
-      }
-    } finally {
-      Thread.currentThread().setContextClassLoader(currentClassLoader);
-    }
-  }
-
-  private <T> T invokeSliderClientRunnable(final SliderClientContextRunnable<T> runnable) throws IOException, InterruptedException, YarnException {
-    ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
-    Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
-    try {
-      boolean securityEnabled = Boolean.valueOf(getHadoopConfigs().get("security_enabled"));
-      UserGroupInformation.setConfiguration(getSliderClientConfiguration());
-      UserGroupInformation sliderUser;
-      String loggedInUser = getUserToRunAs();
-      if (securityEnabled) {
-        String viewPrincipal = getViewParameterValue(PARAM_VIEW_PRINCIPAL);
-        String viewPrincipalKeytab = getViewParameterValue(PARAM_VIEW_PRINCIPAL_KEYTAB);
-        UserGroupInformation ambariUser = UserGroupInformation.loginUserFromKeytabAndReturnUGI(viewPrincipal, viewPrincipalKeytab);
-        if (loggedInUser.equals(ambariUser.getShortUserName())) {
-          // HDFS throws exception when caller tries to impresonate themselves.
-          // User: admin@EXAMPLE.COM is not allowed to impersonate admin
-          sliderUser = ambariUser;
-        } else {
-          sliderUser = UserGroupInformation.createProxyUser(loggedInUser, ambariUser);
-        }
-      } else {
-        sliderUser = UserGroupInformation.getBestUGI(null, loggedInUser);
-      }
-      try {
-        T value = sliderUser.doAs(new PrivilegedExceptionAction<T>() {
-          @Override
-          public T run() throws Exception {
-            final SliderClient sliderClient = createSliderClient();
-            try {
-              return runnable.run(sliderClient);
-            } finally {
-              destroySliderClient(sliderClient);
-            }
-          }
-        });
-        return value;
-      } catch (UndeclaredThrowableException e) {
-        Throwable cause = e.getCause();
-        if (cause instanceof YarnException) {
-          YarnException ye = (YarnException) cause;
-          throw ye;
-        }
-        throw e;
-      }
-    } finally {
-      Thread.currentThread().setContextClassLoader(currentClassLoader);
-    }
-  }
-
-  @Override
-  public boolean appExists(final String appName) throws IOException, InterruptedException, YarnException {
-    return invokeSliderClientRunnable(new SliderClientContextRunnable<Boolean>() {
-      @Override
-      public Boolean run(SliderClient sliderClient) throws YarnException, IOException {
-        if (appName != null) {
-          try {
-            return sliderClient.actionExists(appName, false) == SliderClient.EXIT_SUCCESS;
-          } catch (UnknownApplicationInstanceException e) {
-            return Boolean.FALSE;
-          }
-        }
-        return Boolean.FALSE;
-      }
-    });
-  }
-
-  @Override
-  public SliderApp getSliderApp(final String applicationId, final Set<String> properties)
-     throws YarnException, IOException, InterruptedException {
-    return invokeSliderClientRunnable(new SliderClientContextRunnable<SliderApp>() {
-      @Override
-      public SliderApp run(SliderClient sliderClient) throws YarnException, IOException {
-        if (applicationId!=null) {
-          ApplicationId appId = getApplicationId(applicationId);
-          if (appId != null) {
-            ApplicationReport yarnApp = sliderClient.getApplicationReport(appId);
-            return createSliderAppObject(yarnApp, properties, sliderClient);
-          }
-        }
-        return null;
-      }
-    });
-  }
-
-  private SliderApp createSliderAppObject(ApplicationReport yarnApp,
-      Set<String> properties, SliderClient sliderClient) {
-    if (yarnApp == null) {
-      return null;
-    }
-
-    SliderApp app = new SliderApp();
-    app.setState(yarnApp.getYarnApplicationState().name());
-
-    // Valid Slider App?
-    // We want all Slider apps except the ones which properly finished.
-    if (YarnApplicationState.FINISHED.equals(yarnApp.getYarnApplicationState())) {
-      try {
-        if (sliderClient.actionExists(yarnApp.getName(), false) == LauncherExitCodes.EXIT_SUCCESS) {
-          app.setState(SliderApp.STATE_FROZEN);
-        }
-      } catch (UnknownApplicationInstanceException e) {
-        return null; // Application not in HDFS - means it is not frozen
-      } catch (YarnException e) {
-        logger.warn(
-            "Unable to determine frozen state for " + yarnApp.getName(), e);
-        return null;
-      } catch (IOException e) {
-        logger.warn(
-            "Unable to determine frozen state for " + yarnApp.getName(), e);
-        return null;
-      }
-    }
-    if (YarnApplicationState.KILLED.equals(yarnApp.getYarnApplicationState()) || YarnApplicationState.FAILED.equals(yarnApp.getYarnApplicationState())) {
-      try {
-        if (sliderClient.actionExists(yarnApp.getName(), false) != LauncherExitCodes.EXIT_SUCCESS) {
-          // YARN application is killed or failed, and no HDFS content - Application has been destroyed.
-          return null;
-        }
-      } catch (UnknownApplicationInstanceException e) {
-        return null; // Application not in HDFS - means it is not frozen
-      } catch (YarnException e) {
-        logger.warn("Unable to determine status of killed app " + yarnApp.getName(), e);
-        return null;
-      } catch (IOException e) {
-        logger.warn("Unable to determine status of killed app " + yarnApp.getName(), e);
-        return null;
-      }
-    }
-
-    app.setId(getApplicationIdString(yarnApp.getApplicationId()));
-    app.setName(yarnApp.getName());
-    app.setUser(yarnApp.getUser());
-    app.setDiagnostics(yarnApp.getDiagnostics());
-    app.setYarnId(yarnApp.getApplicationId().toString());
-    app.setStartTime(yarnApp.getStartTime());
-    app.setEndTime(yarnApp.getFinishTime());
-    Set<String> applicationTags = yarnApp.getApplicationTags();
-    if (applicationTags != null && applicationTags.size() > 0) {
-      for (String tag : applicationTags) {
-        int index = tag.indexOf(':');
-        if (index > 0 && index < tag.length() - 1) {
-          String key = tag.substring(0, index).trim();
-          String value = tag.substring(index + 1).trim();
-          if ("name".equals(key)) {
-            app.setType(value);
-            app.setTypeId(value.toUpperCase() + "-" + app.getAppVersion());
-          } else if ("version".equals(key)) {
-            app.setAppVersion(value);
-            app.setTypeId(app.getType() + "-" + value);
-          } else if ("description".equals(key)) {
-            app.setDescription(value);
-          }
-        }
-      }
-    }
-    if (properties != null && !properties.isEmpty()) {
-      SliderAppType matchedAppType = null;
-      List<SliderAppType> matchingAppTypes = getSliderAppTypes(null);
-      if (matchingAppTypes != null && matchingAppTypes.size() > 0) {
-        for (SliderAppType appType : matchingAppTypes) {
-          if ((appType.getTypeName() != null && appType.getTypeName()
-              .equalsIgnoreCase(app.getType()))
-              && (appType.getTypeVersion() != null && appType.getTypeVersion()
-                  .equalsIgnoreCase(app.getAppVersion()))) {
-            matchedAppType = appType;
-            app.setTypeId(appType.getId());
-            break;
-          }
-        }
-      }
-
-      SliderAppMasterClient sliderAppClient = yarnApp.getTrackingUrl() == null ? null
-          : new SliderAppMasterClient(yarnApp.getTrackingUrl(), viewContext);
-      SliderAppMasterData appMasterData = null;
-      Map<String, String> quickLinks = new HashMap<String, String>();
-      Set<String> metrics = new HashSet<String>();
-      for (String property : properties) {
-        if ("RUNNING".equals(app.getState())) {
-          if (sliderAppClient != null) {
-            if (appMasterData == null) {
-              appMasterData = sliderAppClient.getAppMasterData();
-            }
-            if (appMasterData!=null && "urls".equals(property.toLowerCase())) {
-              if (quickLinks.isEmpty()) {
-                quickLinks = sliderAppClient
-                    .getQuickLinks(appMasterData.publisherUrl);
-              }
-              app.setUrls(quickLinks);
-            } else if (appMasterData!=null && "configs".equals(property.toLowerCase())) {
-              Map<String, Map<String, String>> configs = sliderAppClient
-                  .getConfigs(appMasterData.publisherUrl);
-              app.setConfigs(configs);
-            } else if (appMasterData!=null && "jmx".equals(property.toLowerCase())) {
-              if (quickLinks.isEmpty()) {
-                quickLinks = sliderAppClient
-                    .getQuickLinks(appMasterData.publisherUrl);
-              }
-              if (quickLinks != null && quickLinks.containsKey("JMX")) {
-                String jmxUrl = quickLinks.get("JMX");
-                if (matchedAppType != null) {
-                  MetricsHolder metricsHolder = appMetrics.get(matchedAppType
-                      .uniqueName());
-                  app.setJmx(sliderAppClient.getJmx(jmxUrl, viewContext,
-                      matchedAppType, metricsHolder));
-                }
-              }
-              Map<String, Map<String, String>> configs = sliderAppClient
-                  .getConfigs(appMasterData.publisherUrl);
-              app.setConfigs(configs);
-            } else if ("components".equals(property.toLowerCase())) {
-              try {
-                ClusterDescription description = sliderClient
-                    .getClusterDescription(yarnApp.getName());
-                if (description != null && description.status != null
-                    && !description.status.isEmpty()) {
-                  Map<String, SliderAppComponent> componentTypeMap = new HashMap<String, SliderAppComponent>();
-                  for (Entry<String, Object> e : description.status.entrySet()) {
-                    @SuppressWarnings("unchecked")
-                    Map<String, Map<String, Map<String, Object>>> componentsObj = (Map<String, Map<String, Map<String, Object>>>) e
-                        .getValue();
-                    boolean isLive = "live".equals(e.getKey());
-                    for (Entry<String, Map<String, Map<String, Object>>> componentEntry : componentsObj
-                        .entrySet()) {
-                      SliderAppComponent appComponent = componentTypeMap
-                          .get(componentEntry.getKey());
-                      if (appComponent == null) {
-                        appComponent = new SliderAppComponent();
-                        appComponent.setComponentName(componentEntry.getKey());
-                        appComponent
-                            .setActiveContainers(new HashMap<String, Map<String, String>>());
-                        appComponent
-                            .setCompletedContainers(new HashMap<String, Map<String, String>>());
-                        componentTypeMap.put(componentEntry.getKey(),
-                            appComponent);
-                      }
-                      for (Entry<String, Map<String, Object>> containerEntry : componentEntry
-                          .getValue().entrySet()) {
-                        Map<String, String> containerDataMap = new HashMap<String, String>();
-                        String containerId = containerEntry.getKey();
-                        Map<String, Object> containerValues = containerEntry
-                            .getValue();
-                        for (String containerProperty : containerValues
-                            .keySet()) {
-                          Object containerPropertyValue = containerValues
-                              .get(containerProperty);
-                          containerDataMap.put(containerProperty,
-                              containerPropertyValue.toString());
-                        }
-                        if (isLive) {
-                          appComponent.getActiveContainers().put(containerId,
-                              containerDataMap);
-                        } else {
-                          appComponent.getCompletedContainers().put(
-                              containerId, containerDataMap);
-                        }
-                      }
-                      // Set total instances count from statistics
-                      appComponent.setInstanceCount(appComponent
-                          .getActiveContainers().size()
-                          + appComponent.getCompletedContainers().size());
-                      if (description.statistics != null
-                          && description.statistics.containsKey(componentEntry.getKey())) {
-                        Map<String, Integer> statisticsMap = description.statistics.get(componentEntry.getKey());
-                        if (statisticsMap.containsKey("containers.desired")) {
-                          appComponent.setInstanceCount(statisticsMap.get("containers.desired"));
-                        }
-                      }
-                    }
-                  }
-                  app.setAlerts(sliderAlerts.generateComponentsAlerts(componentTypeMap, app.getType()));
-                  app.setComponents(componentTypeMap);
-                }
-              } catch (UnknownApplicationInstanceException e) {
-                logger.warn(
-                    "Unable to determine app components for "
-                        + yarnApp.getName(), e);
-              } catch (YarnException e) {
-                logger.warn(
-                    "Unable to determine app components for "
-                        + yarnApp.getName(), e);
-                throw new RuntimeException(e.getMessage(), e);
-              } catch (IOException e) {
-                logger.warn(
-                    "Unable to determine app components for "
-                        + yarnApp.getName(), e);
-                throw new RuntimeException(e.getMessage(), e);
-              }
-            } else if (property.startsWith(METRICS_PREFIX)) {
-              metrics.add(property.substring(METRICS_PREFIX.length()));
-            } else if ("supportedMetrics".equals(property)) {
-              if (matchedAppType != null) {
-                app.setSupportedMetrics(matchedAppType.getSupportedMetrics());
-              }
-            }
-          }
-        }
-      }
-      if (metrics.size() > 0) {
-        if (quickLinks.isEmpty()) {
-          quickLinks = sliderAppClient
-              .getQuickLinks(appMasterData.publisherUrl);
-        }
-        if (quickLinks != null && quickLinks.containsKey(METRICS_API_NAME)) {
-          String metricsUrl = quickLinks.get(METRICS_API_NAME);
-          MetricsHolder metricsHolder = appMetrics.get(matchedAppType
-              .uniqueName());
-          app.setMetrics(sliderAppClient.getMetrics(yarnApp.getName(),
-              metricsUrl, metrics, null, viewContext, matchedAppType,
-              metricsHolder));
-        }
-      }
-    }
-    return app;
-  }
-
-  /**
-   * Creates a new {@link SliderClient} initialized with appropriate
-   * configuration and started. This slider client can be used to invoke
-   * individual API.
-   * 
-   * When work with this client is done,
-   * {@link #destroySliderClient(SliderClient)} must be called.
-   * 
-   * @return created {@link SliderClient}
-   * @see #destroySliderClient(SliderClient)
-   * @see #runSliderCommand(String...)
-   */
-  protected SliderClient createSliderClient() {
-    Configuration sliderClientConfiguration = getSliderClientConfiguration();
-    SliderClient client = new SliderClient() {
-      @Override
-      public void init(Configuration conf) {
-        super.init(conf);
-        try {
-          initHadoopBinding();
-        } catch (SliderException e) {
-          throw new RuntimeException("Unable to automatically init Hadoop binding", e);
-        } catch (IOException e) {
-          throw new RuntimeException("Unable to automatically init Hadoop binding", e);
-        }
-      }
-    };
-    try {
-      if (logger.isDebugEnabled()) {
-        logger.debug("Slider Client configuration: " + sliderClientConfiguration.toString());
-      }
-      sliderClientConfiguration = client.bindArgs(sliderClientConfiguration,
-          new String[] { "help" });
-      client.init(sliderClientConfiguration);
-      client.start();
-    } catch (Exception e) {
-      logger.warn("Unable to create SliderClient", e);
-      throw new RuntimeException(e.getMessage(), e);
-    } catch (Throwable e) {
-      logger.warn("Unable to create SliderClient", e);
-      throw new RuntimeException(e.getMessage(), e);
-    }
-    return client;
-  }
-
-  protected void destroySliderClient(SliderClient sliderClient) {
-    sliderClient.stop();
-    sliderClient = null;
-  }
-
-  private String getViewParameterValue(String parameterName) {
-    String value = viewContext.getProperties().get(parameterName);
-    if ("null".equals(value)) {
-      return null;
-    }
-    return value;
-  }
-
-  protected Map<String, String> getHadoopConfigs() {
-    return viewContext.getInstanceData();
-  }
-
-  /**
-   * Dynamically determines Slider client configuration. If unable to determine,
-   * <code>null</code> is returned.
-   * 
-   * @return
-   */
-  private Configuration getSliderClientConfiguration() {
-    HdfsConfiguration hdfsConfig = new HdfsConfiguration();
-    YarnConfiguration yarnConfig = new YarnConfiguration(hdfsConfig);
-
-    Map<String, String> hadoopConfigs = getHadoopConfigs();
-    for(Entry<String, String> entry: hadoopConfigs.entrySet()) {
-      String entryValue = entry.getValue();
-      if (entryValue == null) {
-        entryValue = "";
-      }
-      yarnConfig.set(entry.getKey(), entryValue);
-    }
-    yarnConfig.set(PROPERTY_SLIDER_SECURITY_ENABLED, hadoopConfigs.get("security_enabled"));
-    if (hadoopConfigs.containsKey(PROPERTY_SLIDER_ZK_QUORUM)) {
-      yarnConfig.set(PROPERTY_SLIDER_ZK_QUORUM, hadoopConfigs.get(PROPERTY_SLIDER_ZK_QUORUM));
-    }
-    return yarnConfig;
-  }
-
-  private boolean areViewParametersSet() {
-    Map<String, String> hadoopConfigs = getHadoopConfigs();
-    return hadoopConfigs.containsKey("fs.defaultFS")
-        && hadoopConfigs.containsKey("yarn.resourcemanager.address")
-        && hadoopConfigs.containsKey("yarn.resourcemanager.webapp.address")
-        && hadoopConfigs.containsKey(PROPERTY_SLIDER_ZK_QUORUM);
-  }
-
-  @Override
-  public List<SliderApp> getSliderApps(final Set<String> properties)
-      throws YarnException, IOException, InterruptedException {
-    if (!areViewParametersSet()) {
-      return Collections.emptyList();
-    }
-    return invokeSliderClientRunnable(new SliderClientContextRunnable<List<SliderApp>>() {
-      @Override
-      public List<SliderApp> run(SliderClient sliderClient)
-          throws YarnException, IOException {
-        List<SliderApp> sliderApps = new ArrayList<SliderApp>();
-        Map<String, SliderApp> sliderAppsMap = new HashMap<String, SliderApp>();
-        List<ApplicationReport> yarnApps = sliderClient.listSliderInstances(null);
-        for (ApplicationReport yarnApp : yarnApps) {
-          SliderApp sliderAppObject = createSliderAppObject(yarnApp, properties,
-              sliderClient);
-          if (sliderAppObject != null) {
-            if (sliderAppsMap.containsKey(sliderAppObject.getName())) {
-              if (sliderAppsMap.get(sliderAppObject.getName()).getId()
-                  .compareTo(sliderAppObject.getId()) < 0) {
-                sliderAppsMap.put(sliderAppObject.getName(), sliderAppObject);
-              }
-            } else {
-              sliderAppsMap.put(sliderAppObject.getName(), sliderAppObject);
-            }
-          }
-        }
-        if (sliderAppsMap.size() > 0)
-          sliderApps.addAll(sliderAppsMap.values());
-        return sliderApps;
-      }
-    });
-  }
-
-  @Override
-  public void deleteSliderApp(final String applicationId) throws YarnException,
-      IOException, InterruptedException {
-    Integer code = invokeSliderClientRunnable(new SliderClientContextRunnable<Integer>() {
-      @Override
-      public Integer run(SliderClient sliderClient) throws YarnException,
-          IOException, InterruptedException {
-        Set<String> properties = new HashSet<String>();
-        properties.add("id");
-        properties.add("name");
-        SliderApp sliderApp = getSliderApp(applicationId, properties);
-        if (sliderApp == null) {
-          throw new ApplicationNotFoundException(applicationId);
-        }
-        return sliderClient.actionDestroy(sliderApp.getName());
-      }
-    });
-    logger.info("Deleted Slider App [" + applicationId + "] with exit code " + code);
-  }
-
-  @Override
-  public SliderAppType getSliderAppType(String appTypeId, Set<String> properties) {
-    List<SliderAppType> appTypes = getSliderAppTypes(properties);
-    if (appTypeId != null && appTypes != null) {
-      for (SliderAppType appType : appTypes) {
-        if (appTypeId != null && appTypeId.equals(appType.getId())) {
-          return appType;
-        }
-      }
-    }
-    return null;
-  }
-
-  @Override
-  public List<SliderAppType> getSliderAppTypes(Set<String> properties) {
-    try {
-      // Need to determine security enablement before loading app types
-      getViewStatus();
-    } catch (Throwable t) {
-      logger.warn("Unable to determine if cluster is secured when loading app-types", t);
-    }
-    Map<String, String> hadoopConfigs = getHadoopConfigs();
-    final boolean securityEnabled = Boolean.valueOf(hadoopConfigs.get("security_enabled"));
-    if (appTypes == null) {
-      appTypes = loadAppTypes();
-    }
-    if (appTypes != null) {
-      for (SliderAppType appType : appTypes) {
-        Map<String, String> configs = appType.typeConfigsUnsecured;
-        JsonObject resourcesObj = appType.resourcesUnsecured;
-        if (securityEnabled) {
-          configs = appType.typeConfigsSecured;
-          if (configs == null || configs.isEmpty()) {
-            configs = appType.typeConfigsUnsecured;
-          }
-        }
-        if (securityEnabled) {
-          resourcesObj = appType.resourcesSecured;
-          if (resourcesObj == null) {
-            resourcesObj = appType.resourcesUnsecured;
-          }
-        }
-        Map<String, String> appTypeConfigs = new HashMap<String, String>();
-        for (Entry<String, String> e : configs.entrySet()) {
-          String valueString = e.getValue();
-          if (valueString != null && valueString.contains("${USER_NAME}")) {
-            valueString = valueString.replace("${USER_NAME}", getUserToRunAs(hadoopConfigs));
-          }
-          appTypeConfigs.put(e.getKey(), valueString);
-        }
-        appType.setTypeConfigs(appTypeConfigs);
-
-        if (resourcesObj != null) {
-          for (SliderAppTypeComponent component : appType.getTypeComponents()) {
-            JsonElement componentJson = resourcesObj.get(component.getName());
-            if (componentJson != null && componentJson.isJsonObject()) {
-              JsonObject componentObj = componentJson.getAsJsonObject();
-              if (componentObj.has("yarn.component.instances")) {
-                component.setInstanceCount(Integer.parseInt(componentObj.get(
-                    "yarn.component.instances").getAsString()));
-              }
-              if (componentObj.has("yarn.role.priority")) {
-                component.setPriority(Integer.parseInt(componentObj.get("yarn.role.priority").getAsString()));
-              }
-              if (componentObj.has("yarn.memory")) {
-                component.setYarnMemory(Integer.parseInt(componentObj.get("yarn.memory").getAsString()));
-              }
-            }
-          }
-        }
-      }
-    }
-    return appTypes;
-  }
-
-  private List<SliderAppType> loadAppTypes() {
-    List<SliderAppType> appTypes = null;
-    String appsFolderPath = getAppsFolderPath();
-    File appsFolder = new File(appsFolderPath);
-    if (appsFolder.exists()) {
-      File[] appZips = appsFolder
-          .listFiles((FilenameFilter) new RegexFileFilter("^.*\\.zip$"));
-      if (appZips != null) {
-        appTypes = new ArrayList<SliderAppType>();
-        for (File appZip : appZips) {
-          try {
-            ZipFile zipFile = new ZipFile(appZip);
-            Metainfo metainfo = new MetainfoParser().fromXmlStream(zipFile
-                .getInputStream(zipFile.getEntry("metainfo.xml")));
-            // Create app type object
-            if (metainfo.getApplication() != null) {
-              Application application = metainfo.getApplication();
-              ZipArchiveEntry appConfigZipEntry = zipFile.getEntry("appConfig-default.json");
-              ZipArchiveEntry appConfigSecuredZipEntry = zipFile.getEntry("appConfig-secured-default.json");
-              if (appConfigZipEntry == null) {
-                throw new IllegalStateException("Slider App package '" + appZip.getName() + "' does not contain 'appConfig-default.json' file");
-              }
-              ZipArchiveEntry resourcesZipEntry = zipFile.getEntry("resources-default.json");
-              ZipArchiveEntry resourcesSecuredZipEntry = zipFile.getEntry("resources-secured-default.json");
-              if (resourcesZipEntry == null) {
-                throw new IllegalStateException("Slider App package '" + appZip.getName() + "' does not contain 'resources-default.json' file");
-              }
-              SliderAppType appType = new SliderAppType();
-              appType.setId(application.getName() + "-" + application.getVersion());
-              appType.setTypeName(application.getName());
-              appType.setTypeDescription(application.getComment());
-              appType.setTypeVersion(application.getVersion());
-              appType.setTypePackageFileName(appZip.getName());
-              // Configs
-              appType.typeConfigsUnsecured = parseAppTypeConfigs(zipFile, appConfigZipEntry, appZip.getName(), application.getName());
-              if (appConfigSecuredZipEntry != null) {
-                appType.typeConfigsSecured = parseAppTypeConfigs(zipFile, appConfigSecuredZipEntry, appZip.getName(), application.getName());
-              }
-              // Resources
-              appType.resourcesUnsecured = parseAppTypeResources(zipFile, resourcesZipEntry);
-              if (resourcesSecuredZipEntry != null) {
-                appType.resourcesSecured = parseAppTypeResources(zipFile, resourcesSecuredZipEntry);
-              }
-              // Components
-              ArrayList<SliderAppTypeComponent> appTypeComponentList = new ArrayList<SliderAppTypeComponent>();
-              for (Component component : application.getComponents()) {
-                if ("CLIENT".equals(component.getCategory())) {
-                  continue;
-                }
-                SliderAppTypeComponent appTypeComponent = new SliderAppTypeComponent();
-                appTypeComponent.setDisplayName(component.getName());
-                appTypeComponent.setId(component.getName());
-                appTypeComponent.setName(component.getName());
-                appTypeComponent.setYarnMemory(1024);
-                appTypeComponent.setYarnCpuCores(1);
-                // Updated below if present in resources.json
-                appTypeComponent.setInstanceCount(1);
-                // appTypeComponent.setPriority(component.);
-                if (component.getMinInstanceCount() != null) {
-                  appTypeComponent.setInstanceCount(Integer.parseInt(component
-                      .getMinInstanceCount()));
-                }
-                if (component.getMaxInstanceCount() != null) {
-                  appTypeComponent.setMaxInstanceCount(Integer
-                      .parseInt(component.getMaxInstanceCount()));
-                }
-                appTypeComponent.setCategory(component.getCategory());
-                appTypeComponentList.add(appTypeComponent);
-              }
-
-              MetricsHolder metricsHolder = new MetricsHolder();
-              metricsHolder.setJmxMetrics(readMetrics(zipFile,
-                  "jmx_metrics.json"));
-              metricsHolder.setTimelineMetrics(readMetrics(zipFile,
-                  "timeline_metrics.json"));
-              appType.setSupportedMetrics(getSupportedMetrics(metricsHolder
-                  .getTimelineMetrics()));
-              appMetrics.put(appType.uniqueName(), metricsHolder);
-
-              appType.setTypeComponents(appTypeComponentList);
-              appTypes.add(appType);
-            }
-          } catch (ZipException e) {
-            logger.warn("Unable to parse Slider App package " + appZip.getAbsolutePath(), e);
-          } catch (IOException e) {
-            logger.warn("Unable to parse Slider App package " + appZip.getAbsolutePath(), e);
-          } catch (Throwable e) {
-            logger.warn("Unable to parse Slider App package " + appZip.getAbsolutePath(), e);
-          }
-        }
-      }
-    }
-    return appTypes;
-  }
-
-  private JsonObject parseAppTypeResources(ZipFile zipFile, ZipArchiveEntry resourcesZipEntry) throws ZipException, IOException {
-    String resourcesJsonString = IOUtils.toString(zipFile.getInputStream(resourcesZipEntry), "UTF-8");
-    JsonElement resourcesJson = new JsonParser().parse(resourcesJsonString);
-    return resourcesJson.getAsJsonObject().get("components").getAsJsonObject();
-  }
-
-  private Map<String, String> parseAppTypeConfigs(ZipFile zipFile, ZipArchiveEntry appConfigZipEntry, String zipFileName, String appName) throws IOException,
-      ZipException {
-    String appConfigJsonString = IOUtils.toString(zipFile.getInputStream(appConfigZipEntry), "UTF-8");
-    JsonElement appConfigJson = new JsonParser().parse(appConfigJsonString);
-    Map<String, String> configsMap = new HashMap<String, String>();
-    JsonObject appTypeGlobalJson = appConfigJson.getAsJsonObject().get("global").getAsJsonObject();
-    for (Entry<String, JsonElement> e : appTypeGlobalJson.entrySet()) {
-      String key = e.getKey();
-      String valueString = e.getValue().getAsString();
-      if ("application.def".equals(key)) {
-        valueString = String.format(".slider/package/%s/%s", appName, zipFileName);
-      }
-      configsMap.put(key, valueString);
-    }
-    return configsMap;
-  }
-
-  private List<String> getSupportedMetrics(
-      Map<String, Map<String, Map<String, Metric>>> metrics) {
-    Set<String> supportedMetrics = new HashSet<String>();
-    if (metrics != null && metrics.size() > 0) {
-      for (Map<String, Map<String, Metric>> compMetrics : metrics
-          .values()) {
-        for (Map<String, Metric> compMetric : compMetrics.values()) {
-          supportedMetrics.addAll(compMetric.keySet());
-        }
-      }
-    }
-    return new ArrayList<String>(supportedMetrics);
-  }
-
-  Map<String, Map<String, Map<String, Metric>>> readMetrics(ZipFile zipFile,
-      String fileName) {
-    Map<String, Map<String, Map<String, Metric>>> metrics = null;
-    try {
-      InputStream inputStream = zipFile.getInputStream(zipFile
-          .getEntry(fileName));
-      ObjectMapper mapper = new ObjectMapper();
-
-      metrics = mapper.readValue(inputStream,
-          new TypeReference<Map<String, Map<String, Map<String, Metric>>>>() {
-          });
-    } catch (IOException e) {
-      logger.info("Error reading metrics for file " + fileName + ". " + e.getMessage());
-    }
-
-    return metrics;
-  }
-
-  @Override
-  public String createSliderApp(JsonObject json) throws IOException,
-      YarnException, InterruptedException {
-    if (json.has("name") && json.has("typeConfigs")
-        && json.has("resources") && json.has("typeName")) {
-      final String appTypeId = json.get("typeName").getAsString();
-      SliderAppType sliderAppType = getSliderAppType(appTypeId, null);
-      final String appName = json.get("name").getAsString();
-      final String queueName = json.has("queue") ? json.get("queue").getAsString() : null;
-      final boolean securityEnabled = Boolean.valueOf(getHadoopConfigs().get("security_enabled"));
-      final boolean twoWaySSlEnabled = json.has("twoWaySSLEnabled") ? Boolean.valueOf(json.get("twoWaySSLEnabled").getAsString()) : false;
-      JsonObject configs = json.get("typeConfigs").getAsJsonObject();
-      final String hdpVersion = configs.has("env.HDP_VERSION") ? configs.get(
-          "env.HDP_VERSION").getAsString() : null;
-      JsonObject resourcesObj = json.get("resources").getAsJsonObject();
-      JsonArray componentsArray = resourcesObj.get("components").getAsJsonArray();
-      String appsCreateFolderPath = getAppsCreateFolderPath();
-      File appsCreateFolder = new File(appsCreateFolderPath);
-      if (!appsCreateFolder.exists()) {
-        appsCreateFolder.mkdirs();
-      }
-      int appCount;
-      synchronized (createAppCounter) {
-        if (createAppCounter < 0) {
-          // Not initialized
-          createAppCounter = 0;
-          String[] apps = appsCreateFolder.list();
-          for (String app : apps) {
-            try {
-              int count = Integer.parseInt(app);
-              if (count > createAppCounter) {
-                createAppCounter = count;
-              }
-            } catch (NumberFormatException e) {
-            }
-          }
-        }
-        appCount = ++createAppCounter;
-      }
-      File appCreateFolder = new File(appsCreateFolder,
-          Integer.toString(appCount));
-      appCreateFolder.mkdirs();
-      File appConfigJsonFile = new File(appCreateFolder, "appConfig.json");
-      File resourcesJsonFile = new File(appCreateFolder, "resources.json");
-      saveAppConfigs(configs, componentsArray, appName, sliderAppType.getTypeName(), securityEnabled, twoWaySSlEnabled, appConfigJsonFile);
-      saveAppResources(resourcesObj, resourcesJsonFile);
-
-      final ActionCreateArgs createArgs = new ActionCreateArgs();
-      createArgs.template = appConfigJsonFile;
-      createArgs.resources = resourcesJsonFile;
-      if (queueName != null && queueName.trim().length() > 0) {
-        createArgs.queue = queueName;
-      }
-
-      final ActionInstallPackageArgs installArgs = new ActionInstallPackageArgs();
-      String localAppPackageFileName = sliderAppType.getTypePackageFileName();
-      installArgs.name = sliderAppType.getTypeName();
-      installArgs.packageURI = getAppsFolderPath() + "/" + localAppPackageFileName;
-      installArgs.replacePkg = true;
-
-      final List<ActionInstallKeytabArgs> installKeytabActions = new ArrayList<ActionInstallKeytabArgs>();
-      if (securityEnabled) {
-        for (String keytab : getUserToRunAsKeytabs(sliderAppType.getTypeName())) {
-          ActionInstallKeytabArgs keytabArgs = new ActionInstallKeytabArgs();
-          keytabArgs.keytabUri = keytab;
-          keytabArgs.folder = appName;
-          keytabArgs.overwrite = true;
-          installKeytabActions.add(keytabArgs);
-        }
-      }
-
-      return invokeSliderClientRunnable(new SliderClientContextRunnable<String>() {
-        @Override
-        public String run(SliderClient sliderClient) throws YarnException, IOException, InterruptedException {
-          try {
-            File sliderJarFile = SliderUtils.findContainingJar(SliderClient.class);
-            if (sliderJarFile != null) {
-              if (logger.isDebugEnabled()) {
-                logger.debug("slider.libdir=" + sliderJarFile.getParentFile().getAbsolutePath());
-              }
-              System.setProperty("slider.libdir", sliderJarFile.getParentFile().getAbsolutePath());
-            }
-          } catch (Throwable t) {
-            logger.warn("Unable to determine 'slider.libdir' path", t);
-          }
-          if (securityEnabled) {
-            for (ActionInstallKeytabArgs keytabArgs : installKeytabActions) {
-              if (logger.isDebugEnabled()) {
-                logger.debug("Installing keytab " + keytabArgs.keytabUri);
-              }
-              sliderClient.actionInstallKeytab(keytabArgs);
-            }
-          }
-          if (StringUtils.isNotEmpty(hdpVersion)) {
-            System.setProperty("HDP_VERSION", hdpVersion);
-            logger.info("Setting system property HDP_VERSION=" + hdpVersion);
-          }
-          sliderClient.actionInstallPkg(installArgs);
-          sliderClient.actionCreate(appName, createArgs);
-          ApplicationId applicationId = sliderClient.applicationId;
-          if (applicationId != null) {
-            return getApplicationIdString(applicationId);
-          }
-          return null;
-        }
-      });
-    }
-    return null;
-  }
-
-  private void saveAppResources(JsonObject clientResourcesObj,
-      File resourcesJsonFile) throws IOException {
-    JsonObject resourcesObj = new JsonObject();
-    JsonArray clientComponentsArray = clientResourcesObj.get("components").getAsJsonArray();
-    resourcesObj.addProperty("schema",
-        "http://example.org/specification/v2.0.0");
-    resourcesObj.add("metadata", new JsonObject());
-    resourcesObj.add("global",
-        clientResourcesObj.has("global") ? clientResourcesObj.get("global")
-            .getAsJsonObject() : new JsonObject());
-    JsonObject componentsObj = new JsonObject();
-    if (clientComponentsArray != null) {
-      for (int i = 0; i < clientComponentsArray.size(); i++) {
-        JsonObject inputComponent = clientComponentsArray.get(i).getAsJsonObject();
-        if (inputComponent.has("id")) {
-          JsonObject componentValue = new JsonObject();
-          if (inputComponent.has("priority")) {
-            componentValue.addProperty("yarn.role.priority", inputComponent
-                .get("priority").getAsString());
-          }
-          if (inputComponent.has("instanceCount")) {
-            componentValue.addProperty("yarn.component.instances",
-                inputComponent.get("instanceCount").getAsString());
-          }
-          if (inputComponent.has("yarnMemory")) {
-            componentValue.addProperty("yarn.memory",
-                inputComponent.get("yarnMemory").getAsString());
-          }
-          if (inputComponent.has("yarnCpuCores")) {
-            componentValue.addProperty("yarn.vcores",
-                inputComponent.get("yarnCpuCores").getAsString());
-          }
-          if (inputComponent.has("yarnLabel")) {
-            componentValue.addProperty("yarn.label.expression", inputComponent
-                .get("yarnLabel").getAsString());
-          }
-          componentsObj.add(inputComponent.get("id").getAsString(),
-              componentValue);
-        }
-      }
-    }
-    resourcesObj.add("components", componentsObj);
-    String jsonString = new GsonBuilder().setPrettyPrinting().create().toJson(resourcesObj);
-    FileOutputStream fos = null;
-    try {
-      fos = new FileOutputStream(resourcesJsonFile);
-      IOUtils.write(jsonString, fos);
-    } finally {
-      if (fos != null) {
-        fos.close();
-      }
-    }
-  }
-
-  /*
-   * When security is enabled, the AppMaster itself needs the keytab identifying the calling user.
-   * The user's keytab should be at the same location as the view's keytab, and should be
-   * named as ${username}.headless.keytab.
-   * 
-   * This method returns the list of keytabs where the first keytab is always the AppMaster's 
-   * keytab. Additional keys will be provided, only if found at the location of the view's keytab.
-   * Additional keytabs should be of the format ${username}.<APP_TYPE>.*.keytab
-   */
-  private List<String> getUserToRunAsKeytabs(String appType) {
-    List<String> keytabsList = new ArrayList<String>();
-    String viewKeytab = viewContext.getProperties().get(PARAM_VIEW_PRINCIPAL_KEYTAB);
-    String folderPath = "";
-    int index = viewKeytab.lastIndexOf('/');
-    if (index > -1) {
-      folderPath = viewKeytab.substring(0, index);
-    }
-    String username = getUserToRunAs();
-    String userKeytab = folderPath + "/" + username + ".headless.keytab";
-    File folder = new File(folderPath);
-    if (folder.exists()) {
-      final Pattern userKeytabPattern = Pattern.compile("^" + username + "\\." + appType + "\\..*\\.keytab");
-      String[] keytabNames = folder.list(new FilenameFilter() {
-        @Override
-        public boolean accept(File dir, String name) {
-          return userKeytabPattern.matcher(name).matches();
-        }
-      });
-      if (keytabNames != null) {
-        for (String keytabName : keytabNames) {
-          keytabsList.add(folderPath + "/" + keytabName);
-        }
-      }
-    }
-    keytabsList.add(0, userKeytab);
-    if (logger.isDebugEnabled()) {
-      logger.debug(username + " keytabs: " + keytabsList);
-    }
-    return keytabsList;
-  }
-
-  private void saveAppConfigs(JsonObject configs, JsonArray componentsArray,
-      String appName, String appType, boolean securityEnabled, boolean twoWaySSlEnabled, File appConfigJsonFile) throws IOException {
-    JsonObject appConfigs = new JsonObject();
-    appConfigs.addProperty("schema", "http://example.org/specification/v2.0.0");
-    appConfigs.add("metadata", new JsonObject());
-    appConfigs.add("global", configs);
-    JsonObject componentsObj = new JsonObject();
-    if (componentsArray != null) {
-      for (int i = 0; i < componentsArray.size(); i++) {
-        JsonObject inputComponent = componentsArray.get(i).getAsJsonObject();
-        if (inputComponent.has("id")) {
-          componentsObj.add(inputComponent.get("id").getAsString(),
-              new JsonObject());
-        }
-      }
-    }
-    if (securityEnabled) {
-      JsonObject appMasterComponent = new JsonObject();
-      String userToRunAsKeytab = getUserToRunAsKeytabs(appType).get(0);
-      String fileName = userToRunAsKeytab.substring(userToRunAsKeytab.lastIndexOf('/') + 1);
-      String userName = fileName.substring(0, fileName.indexOf('.'));
-      String viewPrincipalName = getViewParameterValue(PARAM_VIEW_PRINCIPAL);
-      int atIndex = viewPrincipalName.lastIndexOf('@');
-      String viewPrincipalDomain = atIndex > -1 ? viewPrincipalName.substring(atIndex+1) : "";
-      appMasterComponent.add("slider.keytab.principal.name", new JsonPrimitive(userName + "@" + viewPrincipalDomain));
-      appMasterComponent.add("slider.am.login.keytab.name", new JsonPrimitive(fileName));
-      appMasterComponent.add("slider.hdfs.keytab.dir", new JsonPrimitive(".slider/keytabs/" + appName));
-      componentsObj.add("slider-appmaster", appMasterComponent);
-   }
-   if (twoWaySSlEnabled) {
-     JsonObject appMasterComponent;
-     if (componentsObj.has("slider-appmaster")) {
-       appMasterComponent = componentsObj.get("slider-appmaster").getAsJsonObject();
-     } else {
-       appMasterComponent = new JsonObject();
-       componentsObj.add("slider-appmaster", appMasterComponent);
-     }
-     appMasterComponent.add("ssl.server.client.auth", new JsonPrimitive("true"));
-   }
-   appConfigs.add("components", componentsObj);
-    String jsonString = new GsonBuilder().setPrettyPrinting().create().toJson(appConfigs);
-    FileOutputStream fos = null;
-    try {
-      fos = new FileOutputStream(appConfigJsonFile);
-      IOUtils.write(jsonString, fos);
-    } finally {
-      if (fos != null) {
-        fos.close();
-      }
-    }
-    if (logger.isDebugEnabled()) {
-      logger.debug("Saved appConfigs.json at " + appConfigJsonFile.getAbsolutePath());
-    }
-  }
-
-  @Override
-  public void freezeApp(final String appId) throws YarnException, IOException,
-      InterruptedException {
-    ApplicationId applicationId = invokeSliderClientRunnable(new SliderClientContextRunnable<ApplicationId>() {
-      @Override
-      public ApplicationId run(SliderClient sliderClient) throws YarnException, IOException, InterruptedException {
-        Set<String> properties = new HashSet<String>();
-        properties.add("id");
-        properties.add("name");
-        final SliderApp sliderApp = getSliderApp(appId, properties);
-        if (sliderApp == null)
-          throw new ApplicationNotFoundException(appId);
-        ActionFreezeArgs freezeArgs = new ActionFreezeArgs();
-        sliderClient.actionFreeze(sliderApp.getName(), freezeArgs);
-        return sliderClient.applicationId;
-      }
-    });
-    logger.info("Frozen Slider App [" + appId + "] with response: " + applicationId.toString());
-  }
-
-  @Override
-  public void thawApp(final String appId) throws YarnException, IOException, InterruptedException {
-    ApplicationId applicationId = invokeSliderClientRunnable(new SliderClientContextRunnable<ApplicationId>() {
-      @Override
-      public ApplicationId run(SliderClient sliderClient) throws YarnException,
-          IOException, InterruptedException {
-        Set<String> properties = new HashSet<String>();
-        properties.add("id");
-        properties.add("name");
-        final SliderApp sliderApp = getSliderApp(appId, properties);
-        if (sliderApp == null)
-          throw new ApplicationNotFoundException(appId);
-        ActionThawArgs thawArgs = new ActionThawArgs();
-        sliderClient.actionThaw(sliderApp.getName(), thawArgs);
-        return sliderClient.applicationId;
-      }
-    });
-    logger.info("Thawed Slider App [" + appId + "] with response: " + applicationId.toString());
-  }
-
-  @Override
-  public void flexApp(final String appId, final Map<String, Integer> componentsMap)
-      throws YarnException, IOException, InterruptedException {
-    ApplicationId applicationId = invokeSliderClientRunnable(new SliderClientContextRunnable<ApplicationId>() {
-      @Override
-      public ApplicationId run(SliderClient sliderClient) throws YarnException,
-          IOException, InterruptedException {
-        Set<String> properties = new HashSet<String>();
-        properties.add("id");
-        properties.add("name");
-        final SliderApp sliderApp = getSliderApp(appId, properties);
-        if (sliderApp == null) {
-          throw new ApplicationNotFoundException(appId);
-        }
-        ActionFlexArgs flexArgs = new ActionFlexArgs();
-        flexArgs.parameters.add(sliderApp.getName());
-        for (Entry<String, Integer> e : componentsMap.entrySet()) {
-          flexArgs.componentDelegate.componentTuples.add(e.getKey());
-          flexArgs.componentDelegate.componentTuples.add(e.getValue()
-              .toString());
-        }
-        sliderClient.actionFlex(sliderApp.getName(), flexArgs);
-        return sliderClient.applicationId;
-      }
-    });
-    logger.info("Flexed Slider App [" + appId + "] with response: " + applicationId);
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/TemporalInfo.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/TemporalInfo.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/TemporalInfo.java
deleted file mode 100644
index a501615..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/TemporalInfo.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider;
-
-/**
- * Temporal query data.
- */
-public interface TemporalInfo {
-  /**
-   * Get the start of the requested time range.  The time is given in
-   * seconds since the Unix epoch.
-   *
-   * @return the start time in seconds
-   */
-  Long getStartTime();
-
-  /**
-   * Get the end of the requested time range.  The time is given in
-   * seconds since the Unix epoch.
-   *
-   * @return the end time in seconds
-   */
-  Long getEndTime();
-
-  /**
-   * Get the requested time between each data point of the temporal
-   * data.  The time is given in seconds.
-   *
-   * @return the step time in seconds
-   */
-  Long getStep();
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/ViewStatus.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/ViewStatus.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/ViewStatus.java
deleted file mode 100644
index 49761dc..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/ViewStatus.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class ViewStatus {
-  public static class Validation {
-    public static enum TYPE {
-      ERROR, WARN
-    }
-
-    public String message;
-    public String type;
-
-    public Validation(String message, String type) {
-      this.message = message;
-      this.type = type;
-    }
-    public Validation(String message) {
-      this.message = message;
-      this.type = TYPE.ERROR.name();
-    }
-  }
-
-  private String version;
-  private Map<String, String> parameters = new HashMap<String, String>();
-  private List<Validation> validations = new ArrayList<ViewStatus.Validation>();
-
-  public String getVersion() {
-    return version;
-  }
-
-  public void setVersion(String version) {
-    this.version = version;
-  }
-
-  public Map<String, String> getParameters() {
-    return parameters;
-  }
-
-  public void setParameters(Map<String, String> parameters) {
-    this.parameters = parameters;
-  }
-
-  public List<Validation> getValidations() {
-    return validations;
-  }
-
-  public void setValidations(List<Validation> validations) {
-    this.validations = validations;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClient.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClient.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClient.java
deleted file mode 100644
index b77e340..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClient.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider.clients;
-
-import java.util.Map;
-
-public interface AmbariClient {
-	/**
-	 * Provides the first cluster defined on this Ambari server.
-	 * 
-	 * @return
-	 */
-	public AmbariClusterInfo getClusterInfo();
-
-	/**
-	 * Provides detailed information about the given cluster.
-	 * 
-	 * @param clusterInfo
-	 * @return
-	 */
-	public AmbariCluster getCluster(AmbariClusterInfo clusterInfo);
-
-	/**
-	 * Provides configs identified by type and tag on given cluster.
-	 * 
-	 * @param cluster
-	 * @param configType
-	 * @param configTag
-	 * @return
-	 */
-	public Map<String, String> getConfiguration(AmbariClusterInfo cluster,
-	    String configType, String configTag);
-
-	/**
-	 * Provides detailed information about the given service.
-	 * 
-	 * @param cluster
-	 * @param serviceId
-	 * @return
-	 */
-	public AmbariService getService(AmbariClusterInfo cluster, String serviceId);
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariCluster.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariCluster.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariCluster.java
deleted file mode 100644
index 2ca2f16..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariCluster.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider.clients;
-
-import java.util.List;
-import java.util.Map;
-
-public class AmbariCluster extends AmbariClusterInfo {
-	private Map<String, String> desiredConfigs;
-	private List<AmbariServiceInfo> services;
-	private List<AmbariHostInfo> hosts;
-
-	public Map<String, String> getDesiredConfigs() {
-		return desiredConfigs;
-	}
-
-	public void setDesiredConfigs(Map<String, String> desiredConfigs) {
-		this.desiredConfigs = desiredConfigs;
-	}
-
-	public List<AmbariServiceInfo> getServices() {
-		return services;
-	}
-
-	public void setServices(List<AmbariServiceInfo> services) {
-		this.services = services;
-	}
-
-	public List<AmbariHostInfo> getHosts() {
-		return hosts;
-	}
-
-	public void setHosts(List<AmbariHostInfo> hosts) {
-		this.hosts = hosts;
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClusterInfo.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClusterInfo.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClusterInfo.java
deleted file mode 100644
index a532b52..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClusterInfo.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider.clients;
-
-public class AmbariClusterInfo {
-	private String name;
-	private String version;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getVersion() {
-		return version;
-	}
-
-	public void setVersion(String version) {
-		this.version = version;
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariHostComponent.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariHostComponent.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariHostComponent.java
deleted file mode 100644
index 3d67d88..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariHostComponent.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider.clients;
-
-public class AmbariHostComponent {
-	private String name;
-	private boolean started;
-	private String hostName;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getHostName() {
-		return hostName;
-	}
-
-	public void setHostName(String hostName) {
-		this.hostName = hostName;
-	}
-
-	public boolean isStarted() {
-		return started;
-	}
-
-	public void setStarted(boolean started) {
-		this.started = started;
-	}
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariHostInfo.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariHostInfo.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariHostInfo.java
deleted file mode 100644
index f522cf3..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariHostInfo.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider.clients;
-
-public class AmbariHostInfo {
-
-	private String hostName;
-
-	public String getHostName() {
-		return hostName;
-	}
-
-	public void setHostName(String hostName) {
-		this.hostName = hostName;
-	}
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariService.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariService.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariService.java
deleted file mode 100644
index dc9b3b3..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariService.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.view.slider.clients;
-
-import java.util.List;
-import java.util.Map;
-
-public class AmbariService extends AmbariServiceInfo {
-
-	private Map<String, List<AmbariHostComponent>> componentsToHostComponentsMap;
-
-	public Map<String, List<AmbariHostComponent>> getComponentsToHostComponentsMap() {
-		return componentsToHostComponentsMap;
-	}
-
-	public void setComponentsToHostComponentsMap(
-	    Map<String, List<AmbariHostComponent>> componentsToHostComponentsMap) {
-		this.componentsToHostComponentsMap = componentsToHostComponentsMap;
-	}
-}


[10/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/production/ember-data.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/production/ember-data.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/production/ember-data.js
deleted file mode 100644
index d6a58cb..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/production/ember-data.js
+++ /dev/null
@@ -1,10626 +0,0 @@
-/*!
- * @overview  Ember Data
- * @copyright Copyright 2011-2014 Tilde Inc. and contributors.
- *            Portions Copyright 2011 LivingSocial Inc.
- * @license   Licensed under MIT license (see license.js)
- * @version   1.0.0-beta.7+canary.238bb5ce
- */
-
-
-(function() {
-var define, requireModule;
-
-(function() {
-  var registry = {}, seen = {};
-
-  define = function(name, deps, callback) {
-    registry[name] = { deps: deps, callback: callback };
-  };
-
-  requireModule = function(name) {
-    if (seen[name]) { return seen[name]; }
-    seen[name] = {};
-
-    var mod, deps, callback, reified , exports;
-
-    mod = registry[name];
-
-    if (!mod) {
-      throw new Error("Module '" + name + "' not found.");
-    }
-
-    deps = mod.deps;
-    callback = mod.callback;
-    reified = [];
-    exports;
-
-    for (var i=0, l=deps.length; i<l; i++) {
-      if (deps[i] === 'exports') {
-        reified.push(exports = {});
-      } else {
-        reified.push(requireModule(deps[i]));
-      }
-    }
-
-    var value = callback.apply(this, reified);
-    return seen[name] = exports || value;
-  };
-})();
-(function() {
-/**
-  @module ember-data
-*/
-
-/**
-  All Ember Data methods and functions are defined inside of this namespace.
-
-  @class DS
-  @static
-*/
-var DS;
-if ('undefined' === typeof DS) {
-  /**
-    @property VERSION
-    @type String
-    @default '1.0.0-beta.7+canary.238bb5ce'
-    @static
-  */
-  DS = Ember.Namespace.create({
-    VERSION: '1.0.0-beta.7+canary.238bb5ce'
-  });
-
-  if ('undefined' !== typeof window) {
-    window.DS = DS;
-  }
-
-  if (Ember.libraries) {
-    Ember.libraries.registerCoreLibrary('Ember Data', DS.VERSION);
-  }
-}
-
-})();
-
-
-
-(function() {
-/**
-  This is used internally to enable deprecation of container paths and provide
-  a decent message to the user indicating how to fix the issue.
-
-  @class ContainerProxy
-  @namespace DS
-  @private
-*/
-var ContainerProxy = function (container){
-  this.container = container;
-};
-
-ContainerProxy.prototype.aliasedFactory = function(path, preLookup) {
-  var _this = this;
-
-  return {create: function(){ 
-    if (preLookup) { preLookup(); }
-
-    return _this.container.lookup(path); 
-  }};
-};
-
-ContainerProxy.prototype.registerAlias = function(source, dest, preLookup) {
-  var factory = this.aliasedFactory(dest, preLookup);
-
-  return this.container.register(source, factory);
-};
-
-ContainerProxy.prototype.registerDeprecation = function(deprecated, valid) {
-  var preLookupCallback = function(){
-    Ember.deprecate("You tried to look up '" + deprecated + "', " +
-                    "but this has been deprecated in favor of '" + valid + "'.", false);
-  };
-
-  return this.registerAlias(deprecated, valid, preLookupCallback);
-};
-
-ContainerProxy.prototype.registerDeprecations = function(proxyPairs) {
-  for (var i = proxyPairs.length; i > 0; i--) {
-    var proxyPair = proxyPairs[i - 1],
-        deprecated = proxyPair['deprecated'],
-        valid = proxyPair['valid'];
-
-    this.registerDeprecation(deprecated, valid);
-  }
-};
-
-DS.ContainerProxy = ContainerProxy;
-
-})();
-
-
-
-(function() {
-var get = Ember.get, set = Ember.set, isNone = Ember.isNone;
-
-// Simple dispatcher to support overriding the aliased
-// method in subclasses.
-function aliasMethod(methodName) {
-  return function() {
-    return this[methodName].apply(this, arguments);
-  };
-}
-
-/**
-  In Ember Data a Serializer is used to serialize and deserialize
-  records when they are transferred in and out of an external source.
-  This process involves normalizing property names, transforming
-  attribute values and serializing relationships.
-
-  For maximum performance Ember Data recommends you use the
-  [RESTSerializer](DS.RESTSerializer.html) or one of its subclasses.
-
-  `JSONSerializer` is useful for simpler or legacy backends that may
-  not support the http://jsonapi.org/ spec.
-
-  @class JSONSerializer
-  @namespace DS
-*/
-DS.JSONSerializer = Ember.Object.extend({
-  /**
-    The primaryKey is used when serializing and deserializing
-    data. Ember Data always uses the `id` property to store the id of
-    the record. The external source may not always follow this
-    convention. In these cases it is useful to override the
-    primaryKey property to match the primaryKey of your external
-    store.
-
-    Example
-
-    ```javascript
-    App.ApplicationSerializer = DS.JSONSerializer.extend({
-      primaryKey: '_id'
-    });
-    ```
-
-    @property primaryKey
-    @type {String}
-    @default 'id'
-  */
-  primaryKey: 'id',
-
-  /**
-   Given a subclass of `DS.Model` and a JSON object this method will
-   iterate through each attribute of the `DS.Model` and invoke the
-   `DS.Transform#deserialize` method on the matching property of the
-   JSON object.  This method is typically called after the
-   serializer's `normalize` method.
-
-   @method applyTransforms
-   @private
-   @param {subclass of DS.Model} type
-   @param {Object} data The data to transform
-   @return {Object} data The transformed data object
-  */
-  applyTransforms: function(type, data) {
-    type.eachTransformedAttribute(function(key, type) {
-      var transform = this.transformFor(type);
-      data[key] = transform.deserialize(data[key]);
-    }, this);
-
-    return data;
-  },
-
-  /**
-    Normalizes a part of the JSON payload returned by
-    the server. You should override this method, munge the hash
-    and call super if you have generic normalization to do.
-
-    It takes the type of the record that is being normalized
-    (as a DS.Model class), the property where the hash was
-    originally found, and the hash to normalize.
-
-    You can use this method, for example, to normalize underscored keys to camelized
-    or other general-purpose normalizations.
-
-    Example
-
-    ```javascript
-    App.ApplicationSerializer = DS.JSONSerializer.extend({
-      normalize: function(type, hash) {
-        var fields = Ember.get(type, 'fields');
-        fields.forEach(function(field) {
-          var payloadField = Ember.String.underscore(field);
-          if (field === payloadField) { return; }
-
-          hash[field] = hash[payloadField];
-          delete hash[payloadField];
-        });
-        return this._super.apply(this, arguments);
-      }
-    });
-    ```
-
-    @method normalize
-    @param {subclass of DS.Model} type
-    @param {Object} hash
-    @return {Object}
-  */
-  normalize: function(type, hash) {
-    if (!hash) { return hash; }
-
-    this.applyTransforms(type, hash);
-    return hash;
-  },
-
-  // SERIALIZE
-  /**
-    Called when a record is saved in order to convert the
-    record into JSON.
-
-    By default, it creates a JSON object with a key for
-    each attribute and belongsTo relationship.
-
-    For example, consider this model:
-
-    ```javascript
-    App.Comment = DS.Model.extend({
-      title: DS.attr(),
-      body: DS.attr(),
-
-      author: DS.belongsTo('user')
-    });
-    ```
-
-    The default serialization would create a JSON object like:
-
-    ```javascript
-    {
-      "title": "Rails is unagi",
-      "body": "Rails? Omakase? O_O",
-      "author": 12
-    }
-    ```
-
-    By default, attributes are passed through as-is, unless
-    you specified an attribute type (`DS.attr('date')`). If
-    you specify a transform, the JavaScript value will be
-    serialized when inserted into the JSON hash.
-
-    By default, belongs-to relationships are converted into
-    IDs when inserted into the JSON hash.
-
-    ## IDs
-
-    `serialize` takes an options hash with a single option:
-    `includeId`. If this option is `true`, `serialize` will,
-    by default include the ID in the JSON object it builds.
-
-    The adapter passes in `includeId: true` when serializing
-    a record for `createRecord`, but not for `updateRecord`.
-
-    ## Customization
-
-    Your server may expect a different JSON format than the
-    built-in serialization format.
-
-    In that case, you can implement `serialize` yourself and
-    return a JSON hash of your choosing.
-
-    ```javascript
-    App.PostSerializer = DS.JSONSerializer.extend({
-      serialize: function(post, options) {
-        var json = {
-          POST_TTL: post.get('title'),
-          POST_BDY: post.get('body'),
-          POST_CMS: post.get('comments').mapProperty('id')
-        }
-
-        if (options.includeId) {
-          json.POST_ID_ = post.get('id');
-        }
-
-        return json;
-      }
-    });
-    ```
-
-    ## Customizing an App-Wide Serializer
-
-    If you want to define a serializer for your entire
-    application, you'll probably want to use `eachAttribute`
-    and `eachRelationship` on the record.
-
-    ```javascript
-    App.ApplicationSerializer = DS.JSONSerializer.extend({
-      serialize: function(record, options) {
-        var json = {};
-
-        record.eachAttribute(function(name) {
-          json[serverAttributeName(name)] = record.get(name);
-        })
-
-        record.eachRelationship(function(name, relationship) {
-          if (relationship.kind === 'hasMany') {
-            json[serverHasManyName(name)] = record.get(name).mapBy('id');
-          }
-        });
-
-        if (options.includeId) {
-          json.ID_ = record.get('id');
-        }
-
-        return json;
-      }
-    });
-
-    function serverAttributeName(attribute) {
-      return attribute.underscore().toUpperCase();
-    }
-
-    function serverHasManyName(name) {
-      return serverAttributeName(name.singularize()) + "_IDS";
-    }
-    ```
-
-    This serializer will generate JSON that looks like this:
-
-    ```javascript
-    {
-      "TITLE": "Rails is omakase",
-      "BODY": "Yep. Omakase.",
-      "COMMENT_IDS": [ 1, 2, 3 ]
-    }
-    ```
-
-    ## Tweaking the Default JSON
-
-    If you just want to do some small tweaks on the default JSON,
-    you can call super first and make the tweaks on the returned
-    JSON.
-
-    ```javascript
-    App.PostSerializer = DS.JSONSerializer.extend({
-      serialize: function(record, options) {
-        var json = this._super.apply(this, arguments);
-
-        json.subject = json.title;
-        delete json.title;
-
-        return json;
-      }
-    });
-    ```
-
-    @method serialize
-    @param {subclass of DS.Model} record
-    @param {Object} options
-    @return {Object} json
-  */
-  serialize: function(record, options) {
-    var json = {};
-
-    if (options && options.includeId) {
-      var id = get(record, 'id');
-
-      if (id) {
-        json[get(this, 'primaryKey')] = id;
-      }
-    }
-
-    record.eachAttribute(function(key, attribute) {
-      this.serializeAttribute(record, json, key, attribute);
-    }, this);
-
-    record.eachRelationship(function(key, relationship) {
-      if (relationship.kind === 'belongsTo') {
-        this.serializeBelongsTo(record, json, relationship);
-      } else if (relationship.kind === 'hasMany') {
-        this.serializeHasMany(record, json, relationship);
-      }
-    }, this);
-
-    return json;
-  },
-
-  /**
-   `serializeAttribute` can be used to customize how `DS.attr`
-   properties are serialized
-
-   For example if you wanted to ensure all you attributes were always
-   serialized as properties on an `attributes` object you could
-   write:
-
-   ```javascript
-   App.ApplicationSerializer = DS.JSONSerializer.extend({
-     serializeAttribute: function(record, json, key, attributes) {
-       json.attributes = json.attributes || {};
-       this._super(record, json.attributes, key, attributes);
-     }
-   });
-   ```
-
-   @method serializeAttribute
-   @param {DS.Model} record
-   @param {Object} json
-   @param {String} key
-   @param {Object} attribute
-  */
-  serializeAttribute: function(record, json, key, attribute) {
-    var attrs = get(this, 'attrs');
-    var value = get(record, key), type = attribute.type;
-
-    if (type) {
-      var transform = this.transformFor(type);
-      value = transform.serialize(value);
-    }
-
-    // if provided, use the mapping provided by `attrs` in
-    // the serializer
-    key = attrs && attrs[key] || (this.keyForAttribute ? this.keyForAttribute(key) : key);
-
-    json[key] = value;
-  },
-
-  /**
-   `serializeBelongsTo` can be used to customize how `DS.belongsTo`
-   properties are serialized.
-
-   Example
-
-   ```javascript
-   App.PostSerializer = DS.JSONSerializer.extend({
-     serializeBelongsTo: function(record, json, relationship) {
-       var key = relationship.key;
-
-       var belongsTo = get(record, key);
-
-       key = this.keyForRelationship ? this.keyForRelationship(key, "belongsTo") : key;
-
-       json[key] = Ember.isNone(belongsTo) ? belongsTo : belongsTo.toJSON();
-     }
-   });
-   ```
-
-   @method serializeBelongsTo
-   @param {DS.Model} record
-   @param {Object} json
-   @param {Object} relationship
-  */
-  serializeBelongsTo: function(record, json, relationship) {
-    var key = relationship.key;
-
-    var belongsTo = get(record, key);
-
-    key = this.keyForRelationship ? this.keyForRelationship(key, "belongsTo") : key;
-
-    if (isNone(belongsTo)) {
-      json[key] = belongsTo;
-    } else {
-      json[key] = get(belongsTo, 'id');
-    }
-
-    if (relationship.options.polymorphic) {
-      this.serializePolymorphicType(record, json, relationship);
-    }
-  },
-
-  /**
-   `serializeHasMany` can be used to customize how `DS.hasMany`
-   properties are serialized.
-
-   Example
-
-   ```javascript
-   App.PostSerializer = DS.JSONSerializer.extend({
-     serializeHasMany: function(record, json, relationship) {
-       var key = relationship.key;
-       if (key === 'comments') {
-         return;
-       } else {
-         this._super.apply(this, arguments);
-       }
-     }
-   });
-   ```
-
-   @method serializeHasMany
-   @param {DS.Model} record
-   @param {Object} json
-   @param {Object} relationship
-  */
-  serializeHasMany: function(record, json, relationship) {
-    var key = relationship.key;
-
-    var relationshipType = DS.RelationshipChange.determineRelationshipType(record.constructor, relationship);
-
-    if (relationshipType === 'manyToNone' || relationshipType === 'manyToMany') {
-      json[key] = get(record, key).mapBy('id');
-      // TODO support for polymorphic manyToNone and manyToMany relationships
-    }
-  },
-
-  /**
-    You can use this method to customize how polymorphic objects are
-    serialized. Objects are considered to be polymorphic if
-    `{polymorphic: true}` is pass as the second argument to the
-    `DS.belongsTo` function.
-
-    Example
-
-    ```javascript
-    App.CommentSerializer = DS.JSONSerializer.extend({
-      serializePolymorphicType: function(record, json, relationship) {
-        var key = relationship.key,
-            belongsTo = get(record, key);
-        key = this.keyForAttribute ? this.keyForAttribute(key) : key;
-        json[key + "_type"] = belongsTo.constructor.typeKey;
-      }
-    });
-   ```
-
-    @method serializePolymorphicType
-    @param {DS.Model} record
-    @param {Object} json
-    @param {Object} relationship
-  */
-  serializePolymorphicType: Ember.K,
-
-  // EXTRACT
-
-  /**
-    The `extract` method is used to deserialize payload data from the
-    server. By default the `JSONSerializer` does not push the records
-    into the store. However records that subclass `JSONSerializer`
-    such as the `RESTSerializer` may push records into the store as
-    part of the extract call.
-
-    This method delegates to a more specific extract method based on
-    the `requestType`.
-
-    Example
-
-    ```javascript
-    var get = Ember.get;
-    socket.on('message', function(message) {
-      var modelName = message.model;
-      var data = message.data;
-      var type = store.modelFor(modelName);
-      var serializer = store.serializerFor(type.typeKey);
-      var record = serializer.extract(store, type, data, get(data, 'id'), 'single');
-      store.push(modelName, record);
-    });
-    ```
-
-    @method extract
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @param {String or Number} id
-    @param {String} requestType
-    @return {Object} json The deserialized payload
-  */
-  extract: function(store, type, payload, id, requestType) {
-    this.extractMeta(store, type, payload);
-
-    var specificExtract = "extract" + requestType.charAt(0).toUpperCase() + requestType.substr(1);
-    return this[specificExtract](store, type, payload, id, requestType);
-  },
-
-  /**
-    `extractFindAll` is a hook into the extract method used when a
-    call is made to `DS.Store#findAll`. By default this method is an
-    alias for [extractArray](#method_extractArray).
-
-    @method extractFindAll
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Array} array An array of deserialized objects
-  */
-  extractFindAll: aliasMethod('extractArray'),
-  /**
-    `extractFindQuery` is a hook into the extract method used when a
-    call is made to `DS.Store#findQuery`. By default this method is an
-    alias for [extractArray](#method_extractArray).
-
-    @method extractFindQuery
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Array} array An array of deserialized objects
-  */
-  extractFindQuery: aliasMethod('extractArray'),
-  /**
-    `extractFindMany` is a hook into the extract method used when a
-    call is made to `DS.Store#findMany`. By default this method is
-    alias for [extractArray](#method_extractArray).
-
-    @method extractFindMany
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Array} array An array of deserialized objects
-  */
-  extractFindMany: aliasMethod('extractArray'),
-  /**
-    `extractFindHasMany` is a hook into the extract method used when a
-    call is made to `DS.Store#findHasMany`. By default this method is
-    alias for [extractArray](#method_extractArray).
-
-    @method extractFindHasMany
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Array} array An array of deserialized objects
-  */
-  extractFindHasMany: aliasMethod('extractArray'),
-
-  /**
-    `extractCreateRecord` is a hook into the extract method used when a
-    call is made to `DS.Store#createRecord`. By default this method is
-    alias for [extractSave](#method_extractSave).
-
-    @method extractCreateRecord
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Object} json The deserialized payload
-  */
-  extractCreateRecord: aliasMethod('extractSave'),
-  /**
-    `extractUpdateRecord` is a hook into the extract method used when
-    a call is made to `DS.Store#update`. By default this method is alias
-    for [extractSave](#method_extractSave).
-
-    @method extractUpdateRecord
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Object} json The deserialized payload
-  */
-  extractUpdateRecord: aliasMethod('extractSave'),
-  /**
-    `extractDeleteRecord` is a hook into the extract method used when
-    a call is made to `DS.Store#deleteRecord`. By default this method is
-    alias for [extractSave](#method_extractSave).
-
-    @method extractDeleteRecord
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Object} json The deserialized payload
-  */
-  extractDeleteRecord: aliasMethod('extractSave'),
-
-  /**
-    `extractFind` is a hook into the extract method used when
-    a call is made to `DS.Store#find`. By default this method is
-    alias for [extractSingle](#method_extractSingle).
-
-    @method extractFind
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Object} json The deserialized payload
-  */
-  extractFind: aliasMethod('extractSingle'),
-  /**
-    `extractFindBelongsTo` is a hook into the extract method used when
-    a call is made to `DS.Store#findBelongsTo`. By default this method is
-    alias for [extractSingle](#method_extractSingle).
-
-    @method extractFindBelongsTo
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Object} json The deserialized payload
-  */
-  extractFindBelongsTo: aliasMethod('extractSingle'),
-  /**
-    `extractSave` is a hook into the extract method used when a call
-    is made to `DS.Model#save`. By default this method is alias
-    for [extractSingle](#method_extractSingle).
-
-    @method extractSave
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Object} json The deserialized payload
-  */
-  extractSave: aliasMethod('extractSingle'),
-
-  /**
-    `extractSingle` is used to deserialize a single record returned
-    from the adapter.
-
-    Example
-
-    ```javascript
-    App.PostSerializer = DS.JSONSerializer.extend({
-      extractSingle: function(store, type, payload) {
-        payload.comments = payload._embedded.comment;
-        delete payload._embedded;
-
-        return this._super(store, type, payload);
-      },
-    });
-    ```
-
-    @method extractSingle
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Object} json The deserialized payload
-  */
-  extractSingle: function(store, type, payload) {
-    return this.normalize(type, payload);
-  },
-
-  /**
-    `extractArray` is used to deserialize an array of records
-    returned from the adapter.
-
-    Example
-
-    ```javascript
-    App.PostSerializer = DS.JSONSerializer.extend({
-      extractArray: function(store, type, payload) {
-        return payload.map(function(json) {
-          return this.extractSingle(json);
-        }, this);
-      }
-    });
-    ```
-
-    @method extractArray
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-    @return {Array} array An array of deserialized objects
-  */
-  extractArray: function(store, type, payload) {
-    return this.normalize(type, payload);
-  },
-
-  /**
-    `extractMeta` is used to deserialize any meta information in the
-    adapter payload. By default Ember Data expects meta information to
-    be located on the `meta` property of the payload object.
-
-    Example
-
-    ```javascript
-    App.PostSerializer = DS.JSONSerializer.extend({
-      extractMeta: function(store, type, payload) {
-        if (payload && payload._pagination) {
-          store.metaForType(type, payload._pagination);
-          delete payload._pagination;
-        }
-      }
-    });
-    ```
-
-    @method extractMeta
-    @param {DS.Store} store
-    @param {subclass of DS.Model} type
-    @param {Object} payload
-  */
-  extractMeta: function(store, type, payload) {
-    if (payload && payload.meta) {
-      store.metaForType(type, payload.meta);
-      delete payload.meta;
-    }
-  },
-
-  /**
-   `keyForAttribute` can be used to define rules for how to convert an
-   attribute name in your model to a key in your JSON.
-
-   Example
-
-   ```javascript
-   App.ApplicationSerializer = DS.RESTSerializer.extend({
-     keyForAttribute: function(attr) {
-       return Ember.String.underscore(attr).toUpperCase();
-     }
-   });
-   ```
-
-   @method keyForAttribute
-   @param {String} key
-   @return {String} normalized key
-  */
-
-
-  /**
-   `keyForRelationship` can be used to define a custom key when
-   serializing relationship properties. By default `JSONSerializer`
-   does not provide an implementation of this method.
-
-   Example
-
-    ```javascript
-    App.PostSerializer = DS.JSONSerializer.extend({
-      keyForRelationship: function(key, relationship) {
-         return 'rel_' + Ember.String.underscore(key);
-      }
-    });
-    ```
-
-   @method keyForRelationship
-   @param {String} key
-   @param {String} relationship type
-   @return {String} normalized key
-  */
-
-  // HELPERS
-
-  /**
-   @method transformFor
-   @private
-   @param {String} attributeType
-   @param {Boolean} skipAssertion
-   @return {DS.Transform} transform
-  */
-  transformFor: function(attributeType, skipAssertion) {
-    var transform = this.container.lookup('transform:' + attributeType);
-    Ember.assert("Unable to find transform for '" + attributeType + "'", skipAssertion || !!transform);
-    return transform;
-  }
-});
-
-})();
-
-
-
-(function() {
-/**
-  @module ember-data
-*/
-var get = Ember.get, capitalize = Ember.String.capitalize, underscore = Ember.String.underscore, DS = window.DS ;
-
-/**
-  Extend `Ember.DataAdapter` with ED specific code.
-
-  @class DebugAdapter
-  @namespace DS
-  @extends Ember.DataAdapter
-  @private
-*/
-DS.DebugAdapter = Ember.DataAdapter.extend({
-  getFilters: function() {
-    return [
-      { name: 'isNew', desc: 'New' },
-      { name: 'isModified', desc: 'Modified' },
-      { name: 'isClean', desc: 'Clean' }
-    ];
-  },
-
-  detect: function(klass) {
-    return klass !== DS.Model && DS.Model.detect(klass);
-  },
-
-  columnsForType: function(type) {
-    var columns = [{ name: 'id', desc: 'Id' }], count = 0, self = this;
-    get(type, 'attributes').forEach(function(name, meta) {
-        if (count++ > self.attributeLimit) { return false; }
-        var desc = capitalize(underscore(name).replace('_', ' '));
-        columns.push({ name: name, desc: desc });
-    });
-    return columns;
-  },
-
-  getRecords: function(type) {
-    return this.get('store').all(type);
-  },
-
-  getRecordColumnValues: function(record) {
-    var self = this, count = 0,
-        columnValues = { id: get(record, 'id') };
-
-    record.eachAttribute(function(key) {
-      if (count++ > self.attributeLimit) {
-        return false;
-      }
-      var value = get(record, key);
-      columnValues[key] = value;
-    });
-    return columnValues;
-  },
-
-  getRecordKeywords: function(record) {
-    var keywords = [], keys = Ember.A(['id']);
-    record.eachAttribute(function(key) {
-      keys.push(key);
-    });
-    keys.forEach(function(key) {
-      keywords.push(get(record, key));
-    });
-    return keywords;
-  },
-
-  getRecordFilterValues: function(record) {
-    return {
-      isNew: record.get('isNew'),
-      isModified: record.get('isDirty') && !record.get('isNew'),
-      isClean: !record.get('isDirty')
-    };
-  },
-
-  getRecordColor: function(record) {
-    var color = 'black';
-    if (record.get('isNew')) {
-      color = 'green';
-    } else if (record.get('isDirty')) {
-      color = 'blue';
-    }
-    return color;
-  },
-
-  observeRecord: function(record, recordUpdated) {
-    var releaseMethods = Ember.A(), self = this,
-        keysToObserve = Ember.A(['id', 'isNew', 'isDirty']);
-
-    record.eachAttribute(function(key) {
-      keysToObserve.push(key);
-    });
-
-    keysToObserve.forEach(function(key) {
-      var handler = function() {
-        recordUpdated(self.wrapRecord(record));
-      };
-      Ember.addObserver(record, key, handler);
-      releaseMethods.push(function() {
-        Ember.removeObserver(record, key, handler);
-      });
-    });
-
-    var release = function() {
-      releaseMethods.forEach(function(fn) { fn(); } );
-    };
-
-    return release;
-  }
-
-});
-
-})();
-
-
-
-(function() {
-/**
-  The `DS.Transform` class is used to serialize and deserialize model
-  attributes when they are saved or loaded from an
-  adapter. Subclassing `DS.Transform` is useful for creating custom
-  attributes. All subclasses of `DS.Transform` must implement a
-  `serialize` and a `deserialize` method.
-
-  Example
-
-  ```javascript
-  App.RawTransform = DS.Transform.extend({
-    deserialize: function(serialized) {
-      return serialized;
-    },
-    serialize: function(deserialized) {
-      return deserialized;
-    }
-  });
-  ```
-
-  Usage
-
-  ```javascript
-  var attr = DS.attr;
-  App.Requirement = DS.Model.extend({
-    name: attr('string'),
-    optionsArray: attr('raw')
-  });
-  ```
-
-  @class Transform
-  @namespace DS
- */
-DS.Transform = Ember.Object.extend({
-  /**
-    When given a deserialized value from a record attribute this
-    method must return the serialized value.
-
-    Example
-
-    ```javascript
-    serialize: function(deserialized) {
-      return Ember.isEmpty(deserialized) ? null : Number(deserialized);
-    }
-    ```
-
-    @method serialize
-    @param deserialized The deserialized value
-    @return The serialized value
-  */
-  serialize: Ember.required(),
-
-  /**
-    When given a serialize value from a JSON object this method must
-    return the deserialized value for the record attribute.
-
-    Example
-
-    ```javascript
-    deserialize: function(serialized) {
-      return empty(serialized) ? null : Number(serialized);
-    }
-    ```
-
-    @method deserialize
-    @param serialized The serialized value
-    @return The deserialized value
-  */
-  deserialize: Ember.required()
-
-});
-
-})();
-
-
-
-(function() {
-
-/**
-  The `DS.BooleanTransform` class is used to serialize and deserialize
-  boolean attributes on Ember Data record objects. This transform is
-  used when `boolean` is passed as the type parameter to the
-  [DS.attr](../../data#method_attr) function.
-
-  Usage
-
-  ```javascript
-  var attr = DS.attr;
-  App.User = DS.Model.extend({
-    isAdmin: attr('boolean'),
-    name: attr('string'),
-    email: attr('string')
-  });
-  ```
-
-  @class BooleanTransform
-  @extends DS.Transform
-  @namespace DS
- */
-DS.BooleanTransform = DS.Transform.extend({
-  deserialize: function(serialized) {
-    var type = typeof serialized;
-
-    if (type === "boolean") {
-      return serialized;
-    } else if (type === "string") {
-      return serialized.match(/^true$|^t$|^1$/i) !== null;
-    } else if (type === "number") {
-      return serialized === 1;
-    } else {
-      return false;
-    }
-  },
-
-  serialize: function(deserialized) {
-    return Boolean(deserialized);
-  }
-});
-
-})();
-
-
-
-(function() {
-/**
-  The `DS.DateTransform` class is used to serialize and deserialize
-  date attributes on Ember Data record objects. This transform is used
-  when `date` is passed as the type parameter to the
-  [DS.attr](../../data#method_attr) function.
-
-  ```javascript
-  var attr = DS.attr;
-  App.Score = DS.Model.extend({
-    value: attr('number'),
-    player: DS.belongsTo('player'),
-    date: attr('date')
-  });
-  ```
-
-  @class DateTransform
-  @extends DS.Transform
-  @namespace DS
- */
-DS.DateTransform = DS.Transform.extend({
-
-  deserialize: function(serialized) {
-    var type = typeof serialized;
-
-    if (type === "string") {
-      return new Date(Ember.Date.parse(serialized));
-    } else if (type === "number") {
-      return new Date(serialized);
-    } else if (serialized === null || serialized === undefined) {
-      // if the value is not present in the data,
-      // return undefined, not null.
-      return serialized;
-    } else {
-      return null;
-    }
-  },
-
-  serialize: function(date) {
-    if (date instanceof Date) {
-      // Serialize it as a number to maintain millisecond precision
-      return Number(date);
-    } else {
-      return null;
-    }
-  }
-
-});
-
-})();
-
-
-
-(function() {
-var empty = Ember.isEmpty;
-/**
-  The `DS.NumberTransform` class is used to serialize and deserialize
-  numeric attributes on Ember Data record objects. This transform is
-  used when `number` is passed as the type parameter to the
-  [DS.attr](../../data#method_attr) function.
-
-  Usage
-
-  ```javascript
-  var attr = DS.attr;
-  App.Score = DS.Model.extend({
-    value: attr('number'),
-    player: DS.belongsTo('player'),
-    date: attr('date')
-  });
-  ```
-
-  @class NumberTransform
-  @extends DS.Transform
-  @namespace DS
- */
-DS.NumberTransform = DS.Transform.extend({
-
-  deserialize: function(serialized) {
-    return empty(serialized) ? null : Number(serialized);
-  },
-
-  serialize: function(deserialized) {
-    return empty(deserialized) ? null : Number(deserialized);
-  }
-});
-
-})();
-
-
-
-(function() {
-var none = Ember.isNone;
-
-/**
-  The `DS.StringTransform` class is used to serialize and deserialize
-  string attributes on Ember Data record objects. This transform is
-  used when `string` is passed as the type parameter to the
-  [DS.attr](../../data#method_attr) function.
-
-  Usage
-
-  ```javascript
-  var attr = DS.attr;
-  App.User = DS.Model.extend({
-    isAdmin: attr('boolean'),
-    name: attr('string'),
-    email: attr('string')
-  });
-  ```
-
-  @class StringTransform
-  @extends DS.Transform
-  @namespace DS
- */
-DS.StringTransform = DS.Transform.extend({
-
-  deserialize: function(serialized) {
-    return none(serialized) ? null : String(serialized);
-  },
-
-  serialize: function(deserialized) {
-    return none(deserialized) ? null : String(deserialized);
-  }
-
-});
-
-})();
-
-
-
-(function() {
-
-})();
-
-
-
-(function() {
-/**
-  @module ember-data
-*/
-
-var set = Ember.set;
-
-/*
-  This code registers an injection for Ember.Application.
-
-  If an Ember.js developer defines a subclass of DS.Store on their application,
-  this code will automatically instantiate it and make it available on the
-  router.
-
-  Additionally, after an application's controllers have been injected, they will
-  each have the store made available to them.
-
-  For example, imagine an Ember.js application with the following classes:
-
-  App.Store = DS.Store.extend({
-    adapter: 'custom'
-  });
-
-  App.PostsController = Ember.ArrayController.extend({
-    // ...
-  });
-
-  When the application is initialized, `App.Store` will automatically be
-  instantiated, and the instance of `App.PostsController` will have its `store`
-  property set to that instance.
-
-  Note that this code will only be run if the `ember-application` package is
-  loaded. If Ember Data is being used in an environment other than a
-  typical application (e.g., node.js where only `ember-runtime` is available),
-  this code will be ignored.
-*/
-
-Ember.onLoad('Ember.Application', function(Application) {
-  Application.initializer({
-    name: "store",
-
-    initialize: function(container, application) {
-      application.register('store:main', application.Store || DS.Store);
-
-      // allow older names to be looked up
-
-      var proxy = new DS.ContainerProxy(container);
-      proxy.registerDeprecations([
-        {deprecated: 'serializer:_default',  valid: 'serializer:-default'},
-        {deprecated: 'serializer:_rest',     valid: 'serializer:-rest'},
-        {deprecated: 'adapter:_rest',        valid: 'adapter:-rest'}
-      ]);
-
-      // new go forward paths
-      application.register('serializer:-default', DS.JSONSerializer);
-      application.register('serializer:-rest', DS.RESTSerializer);
-      application.register('adapter:-rest', DS.RESTAdapter);
-
-      // Eagerly generate the store so defaultStore is populated.
-      // TODO: Do this in a finisher hook
-      container.lookup('store:main');
-    }
-  });
-
-  Application.initializer({
-    name: "transforms",
-    before: "store",
-
-    initialize: function(container, application) {
-      application.register('transform:boolean', DS.BooleanTransform);
-      application.register('transform:date', DS.DateTransform);
-      application.register('transform:number', DS.NumberTransform);
-      application.register('transform:string', DS.StringTransform);
-    }
-  });
-
-  Application.initializer({
-    name: "data-adapter",
-    before: "store",
-
-    initialize: function(container, application) {
-      application.register('data-adapter:main', DS.DebugAdapter);
-    }
-  });
-
-  Application.initializer({
-    name: "injectStore",
-    before: "store",
-
-    initialize: function(container, application) {
-      application.inject('controller', 'store', 'store:main');
-      application.inject('route', 'store', 'store:main');
-      application.inject('serializer', 'store', 'store:main');
-      application.inject('data-adapter', 'store', 'store:main');
-    }
-  });
-
-});
-
-})();
-
-
-
-(function() {
-/**
-  @module ember-data
-*/
-
-/**
-  Date.parse with progressive enhancement for ISO 8601 <https://github.com/csnover/js-iso8601>
-
-  © 2011 Colin Snover <http://zetafleet.com>
-
-  Released under MIT license.
-
-  @class Date
-  @namespace Ember
-  @static
-*/
-Ember.Date = Ember.Date || {};
-
-var origParse = Date.parse, numericKeys = [ 1, 4, 5, 6, 7, 10, 11 ];
-
-/**
-  @method parse
-  @param date
-*/
-Ember.Date.parse = function (date) {
-    var timestamp, struct, minutesOffset = 0;
-
-    // ES5 §15.9.4.2 states that the string should attempt to be parsed as a Date Time String Format string
-    // before falling back to any implementation-specific date parsing, so that’s what we do, even if native
-    // implementations could be faster
-    //              1 YYYY                2 MM       3 DD           4 HH    5 mm       6 ss        7 msec        8 Z 9 ±    10 tzHH    11 tzmm
-    if ((struct = /^(\d{4}|[+\-]\d{6})(?:-(\d{2})(?:-(\d{2}))?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{3}))?)?(?:(Z)|([+\-])(\d{2})(?::(\d{2}))?)?)?$/.exec(date))) {
-        // avoid NaN timestamps caused by “undefined” values being passed to Date.UTC
-        for (var i = 0, k; (k = numericKeys[i]); ++i) {
-            struct[k] = +struct[k] || 0;
-        }
-
-        // allow undefined days and months
-        struct[2] = (+struct[2] || 1) - 1;
-        struct[3] = +struct[3] || 1;
-
-        if (struct[8] !== 'Z' && struct[9] !== undefined) {
-            minutesOffset = struct[10] * 60 + struct[11];
-
-            if (struct[9] === '+') {
-                minutesOffset = 0 - minutesOffset;
-            }
-        }
-
-        timestamp = Date.UTC(struct[1], struct[2], struct[3], struct[4], struct[5] + minutesOffset, struct[6], struct[7]);
-    }
-    else {
-        timestamp = origParse ? origParse(date) : NaN;
-    }
-
-    return timestamp;
-};
-
-if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.Date) {
-  Date.parse = Ember.Date.parse;
-}
-
-})();
-
-
-
-(function() {
-
-})();
-
-
-
-(function() {
-/**
-  @module ember-data
-*/
-
-var get = Ember.get, set = Ember.set;
-
-/**
-  A record array is an array that contains records of a certain type. The record
-  array materializes records as needed when they are retrieved for the first
-  time. You should not create record arrays yourself. Instead, an instance of
-  `DS.RecordArray` or its subclasses will be returned by your application's store
-  in response to queries.
-
-  @class RecordArray
-  @namespace DS
-  @extends Ember.ArrayProxy
-  @uses Ember.Evented
-*/
-
-DS.RecordArray = Ember.ArrayProxy.extend(Ember.Evented, {
-  /**
-    The model type contained by this record array.
-
-    @property type
-    @type DS.Model
-  */
-  type: null,
-
-  /**
-    The array of client ids backing the record array. When a
-    record is requested from the record array, the record
-    for the client id at the same index is materialized, if
-    necessary, by the store.
-
-    @property content
-    @private
-    @type Ember.Array
-  */
-  content: null,
-
-  /**
-    The flag to signal a `RecordArray` is currently loading data.
-
-    Example
-
-    ```javascript
-    var people = store.all(App.Person);
-    people.get('isLoaded'); // true
-    ```
-
-    @property isLoaded
-    @type Boolean
-  */
-  isLoaded: false,
-  /**
-    The flag to signal a `RecordArray` is currently loading data.
-
-    Example
-
-    ```javascript
-    var people = store.all(App.Person);
-    people.get('isUpdating'); // false
-    people.update();
-    people.get('isUpdating'); // true
-    ```
-
-    @property isUpdating
-    @type Boolean
-  */
-  isUpdating: false,
-
-  /**
-    The store that created this record array.
-
-    @property store
-    @private
-    @type DS.Store
-  */
-  store: null,
-
-  /**
-    Retrieves an object from the content by index.
-
-    @method objectAtContent
-    @private
-    @param {Number} index
-    @return {DS.Model} record
-  */
-  objectAtContent: function(index) {
-    var content = get(this, 'content');
-
-    return content.objectAt(index);
-  },
-
-  /**
-    Used to get the latest version of all of the records in this array
-    from the adapter.
-
-    Example
-
-    ```javascript
-    var people = store.all(App.Person);
-    people.get('isUpdating'); // false
-    people.update();
-    people.get('isUpdating'); // true
-    ```
-
-    @method update
-  */
-  update: function() {
-    if (get(this, 'isUpdating')) { return; }
-
-    var store = get(this, 'store'),
-        type = get(this, 'type');
-
-    return store.fetchAll(type, this);
-  },
-
-  /**
-    Adds a record to the `RecordArray`.
-
-    @method addRecord
-    @private
-    @param {DS.Model} record
-  */
-  addRecord: function(record) {
-    get(this, 'content').addObject(record);
-  },
-
-  /**
-    Removes a record to the `RecordArray`.
-
-    @method removeRecord
-    @private
-    @param {DS.Model} record
-  */
-  removeRecord: function(record) {
-    get(this, 'content').removeObject(record);
-  },
-
-  /**
-    Saves all of the records in the `RecordArray`.
-
-    Example
-
-    ```javascript
-    var messages = store.all(App.Message);
-    messages.forEach(function(message) {
-      message.set('hasBeenSeen', true);
-    });
-    messages.save();
-    ```
-
-    @method save
-    @return {DS.PromiseArray} promise
-  */
-  save: function() {
-    var promiseLabel = "DS: RecordArray#save " + get(this, 'type');
-    var promise = Ember.RSVP.all(this.invoke("save"), promiseLabel).then(function(array) {
-      return Ember.A(array);
-    }, null, "DS: RecordArray#save apply Ember.NativeArray");
-
-    return DS.PromiseArray.create({ promise: promise });
-  }
-});
-
-})();
-
-
-
-(function() {
-/**
-  @module ember-data
-*/
-
-var get = Ember.get;
-
-/**
-  Represents a list of records whose membership is determined by the
-  store. As records are created, loaded, or modified, the store
-  evaluates them to determine if they should be part of the record
-  array.
-
-  @class FilteredRecordArray
-  @namespace DS
-  @extends DS.RecordArray
-*/
-DS.FilteredRecordArray = DS.RecordArray.extend({
-  /**
-    The filterFunction is a function used to test records from the store to
-    determine if they should be part of the record array.
-
-    Example
-
-    ```javascript
-    var allPeople = store.all('person');
-    allPeople.mapBy('name'); // ["Tom Dale", "Yehuda Katz", "Trek Glowacki"]
-
-    var people = store.filter('person', function(person) {
-      if (person.get('name').match(/Katz$/)) { return true; }
-    });
-    people.mapBy('name'); // ["Yehuda Katz"]
-
-    var notKatzFilter = function(person) {
-      return !person.get('name').match(/Katz$/);
-    };
-    people.set('filterFunction', notKatzFilter);
-    people.mapBy('name'); // ["Tom Dale", "Trek Glowacki"]
-    ```
-
-    @method filterFunction
-    @param {DS.Model} record
-    @return {Boolean} `true` if the record should be in the array
-  */
-  filterFunction: null,
-  isLoaded: true,
-
-  replace: function() {
-    var type = get(this, 'type').toString();
-    throw new Error("The result of a client-side filter (on " + type + ") is immutable.");
-  },
-
-  /**
-    @method updateFilter
-    @private
-  */
-  updateFilter: Ember.observer(function() {
-    var manager = get(this, 'manager');
-    manager.updateFilter(this, get(this, 'type'), get(this, 'filterFunction'));
-  }, 'filterFunction')
-});
-
-})();
-
-
-
-(function() {
-/**
-  @module ember-data
-*/
-
-var get = Ember.get, set = Ember.set;
-
-/**
-  Represents an ordered list of records whose order and membership is
-  determined by the adapter. For example, a query sent to the adapter
-  may trigger a search on the server, whose results would be loaded
-  into an instance of the `AdapterPopulatedRecordArray`.
-
-  @class AdapterPopulatedRecordArray
-  @namespace DS
-  @extends DS.RecordArray
-*/
-DS.AdapterPopulatedRecordArray = DS.RecordArray.extend({
-  query: null,
-
-  replace: function() {
-    var type = get(this, 'type').toString();
-    throw new Error("The result of a server query (on " + type + ") is immutable.");
-  },
-
-  /**
-    @method load
-    @private
-    @param {Array} data
-  */
-  load: function(data) {
-    var store = get(this, 'store'),
-        type = get(this, 'type'),
-        records = store.pushMany(type, data),
-        meta = store.metadataFor(type);
-
-    this.setProperties({
-      content: Ember.A(records),
-      isLoaded: true,
-      meta: meta
-    });
-
-    // TODO: does triggering didLoad event should be the last action of the runLoop?
-    Ember.run.once(this, 'trigger', 'didLoad');
-  }
-});
-
-})();
-
-
-
-(function() {
-/**
-  @module ember-data
-*/
-
-var get = Ember.get, set = Ember.set;
-var map = Ember.EnumerableUtils.map;
-
-/**
-  A `ManyArray` is a `RecordArray` that represents the contents of a has-many
-  relationship.
-
-  The `ManyArray` is instantiated lazily the first time the relationship is
-  requested.
-
-  ### Inverses
-
-  Often, the relationships in Ember Data applications will have
-  an inverse. For example, imagine the following models are
-  defined:
-
-  ```javascript
-  App.Post = DS.Model.extend({
-    comments: DS.hasMany('comment')
-  });
-
-  App.Comment = DS.Model.extend({
-    post: DS.belongsTo('post')
-  });
-  ```
-
-  If you created a new instance of `App.Post` and added
-  a `App.Comment` record to its `comments` has-many
-  relationship, you would expect the comment's `post`
-  property to be set to the post that contained
-  the has-many.
-
-  We call the record to which a relationship belongs the
-  relationship's _owner_.
-
-  @class ManyArray
-  @namespace DS
-  @extends DS.RecordArray
-*/
-DS.ManyArray = DS.RecordArray.extend({
-  init: function() {
-    this._super.apply(this, arguments);
-    this._changesToSync = Ember.OrderedSet.create();
-  },
-
-  /**
-    The property name of the relationship
-
-    @property {String} name
-    @private
-  */
-  name: null,
-
-  /**
-    The record to which this relationship belongs.
-
-    @property {DS.Model} owner
-    @private
-  */
-  owner: null,
-
-  /**
-    `true` if the relationship is polymorphic, `false` otherwise.
-
-    @property {Boolean} isPolymorphic
-    @private
-  */
-  isPolymorphic: false,
-
-  // LOADING STATE
-
-  isLoaded: false,
-
-  /**
-    Used for async `hasMany` arrays
-    to keep track of when they will resolve.
-
-    @property {Ember.RSVP.Promise} promise
-    @private
-  */
-  promise: null,
-
-  /**
-    @method loadingRecordsCount
-    @param {Number} count
-    @private
-  */
-  loadingRecordsCount: function(count) {
-    this.loadingRecordsCount = count;
-  },
-
-  /**
-    @method loadedRecord
-    @private
-  */
-  loadedRecord: function() {
-    this.loadingRecordsCount--;
-    if (this.loadingRecordsCount === 0) {
-      set(this, 'isLoaded', true);
-      this.trigger('didLoad');
-    }
-  },
-
-  /**
-    @method fetch
-    @private
-  */
-  fetch: function() {
-    var records = get(this, 'content'),
-        store = get(this, 'store'),
-        owner = get(this, 'owner'),
-        resolver = Ember.RSVP.defer("DS: ManyArray#fetch " + get(this, 'type'));
-
-    var unloadedRecords = records.filterProperty('isEmpty', true);
-    store.fetchMany(unloadedRecords, owner, resolver);
-  },
-
-  // Overrides Ember.Array's replace method to implement
-  replaceContent: function(index, removed, added) {
-    // Map the array of record objects into an array of  client ids.
-    added = map(added, function(record) {
-      Ember.assert("You cannot add '" + record.constructor.typeKey + "' records to this relationship (only '" + this.type.typeKey + "' allowed)", !this.type || record instanceof this.type);
-      return record;
-    }, this);
-
-    this._super(index, removed, added);
-  },
-
-  arrangedContentDidChange: function() {
-    Ember.run.once(this, 'fetch');
-  },
-
-  arrayContentWillChange: function(index, removed, added) {
-    var owner = get(this, 'owner'),
-        name = get(this, 'name');
-
-    if (!owner._suspendedRelationships) {
-      // This code is the first half of code that continues inside
-      // of arrayContentDidChange. It gets or creates a change from
-      // the child object, adds the current owner as the old
-      // parent if this is the first time the object was removed
-      // from a ManyArray, and sets `newParent` to null.
-      //
-      // Later, if the object is added to another ManyArray,
-      // the `arrayContentDidChange` will set `newParent` on
-      // the change.
-      for (var i=index; i<index+removed; i++) {
-        var record = get(this, 'content').objectAt(i);
-
-        var change = DS.RelationshipChange.createChange(owner, record, get(this, 'store'), {
-          parentType: owner.constructor,
-          changeType: "remove",
-          kind: "hasMany",
-          key: name
-        });
-
-        this._changesToSync.add(change);
-      }
-    }
-
-    return this._super.apply(this, arguments);
-  },
-
-  arrayContentDidChange: function(index, removed, added) {
-    this._super.apply(this, arguments);
-
-    var owner = get(this, 'owner'),
-        name = get(this, 'name'),
-        store = get(this, 'store');
-
-    if (!owner._suspendedRelationships) {
-      // This code is the second half of code that started in
-      // `arrayContentWillChange`. It gets or creates a change
-      // from the child object, and adds the current owner as
-      // the new parent.
-      for (var i=index; i<index+added; i++) {
-        var record = get(this, 'content').objectAt(i);
-
-        var change = DS.RelationshipChange.createChange(owner, record, store, {
-          parentType: owner.constructor,
-          changeType: "add",
-          kind:"hasMany",
-          key: name
-        });
-        change.hasManyName = name;
-
-        this._changesToSync.add(change);
-      }
-
-      // We wait until the array has finished being
-      // mutated before syncing the OneToManyChanges created
-      // in arrayContentWillChange, so that the array
-      // membership test in the sync() logic operates
-      // on the final results.
-      this._changesToSync.forEach(function(change) {
-        change.sync();
-      });
-
-      this._changesToSync.clear();
-    }
-  },
-
-  /**
-    Create a child record within the owner
-
-    @method createRecord
-    @private
-    @param {Object} hash
-    @return {DS.Model} record
-  */
-  createRecord: function(hash) {
-    var owner = get(this, 'owner'),
-        store = get(owner, 'store'),
-        type = get(this, 'type'),
-        record;
-
-    Ember.assert("You cannot add '" + type.typeKey + "' records to this polymorphic relationship.", !get(this, 'isPolymorphic'));
-
-    record = store.createRecord.call(store, type, hash);
-    this.pushObject(record);
-
-    return record;
-  }
-
-});
-
-})();
-
-
-
-(function() {
-/**
-  @module ember-data
-*/
-
-})();
-
-
-
-(function() {
-/*globals Ember*/
-/*jshint eqnull:true*/
-/**
-  @module ember-data
-*/
-
-var get = Ember.get, set = Ember.set;
-var once = Ember.run.once;
-var isNone = Ember.isNone;
-var forEach = Ember.EnumerableUtils.forEach;
-var indexOf = Ember.EnumerableUtils.indexOf;
-var map = Ember.EnumerableUtils.map;
-var resolve = Ember.RSVP.resolve;
-var copy = Ember.copy;
-
-// Implementors Note:
-//
-//   The variables in this file are consistently named according to the following
-//   scheme:
-//
-//   * +id+ means an identifier managed by an external source, provided inside
-//     the data provided by that source. These are always coerced to be strings
-//     before being used internally.
-//   * +clientId+ means a transient numerical identifier generated at runtime by
-//     the data store. It is important primarily because newly created objects may
-//     not yet have an externally generated id.
-//   * +reference+ means a record reference object, which holds metadata about a
-//     record, even if it has not yet been fully materialized.
-//   * +type+ means a subclass of DS.Model.
-
-// Used by the store to normalize IDs entering the store.  Despite the fact
-// that developers may provide IDs as numbers (e.g., `store.find(Person, 1)`),
-// it is important that internally we use strings, since IDs may be serialized
-// and lose type information.  For example, Ember's router may put a record's
-// ID into the URL, and if we later try to deserialize that URL and find the
-// corresponding record, we will not know if it is a string or a number.
-var coerceId = function(id) {
-  return id == null ? null : id+'';
-};
-
-/**
-  The store contains all of the data for records loaded from the server.
-  It is also responsible for creating instances of `DS.Model` that wrap
-  the individual data for a record, so that they can be bound to in your
-  Handlebars templates.
-
-  Define your application's store like this:
-
-  ```javascript
-  MyApp.Store = DS.Store.extend();
-  ```
-
-  Most Ember.js applications will only have a single `DS.Store` that is
-  automatically created by their `Ember.Application`.
-
-  You can retrieve models from the store in several ways. To retrieve a record
-  for a specific id, use `DS.Store`'s `find()` method:
-
-  ```javascript
-  var person = store.find('person', 123);
-  ```
-
-  If your application has multiple `DS.Store` instances (an unusual case), you can
-  specify which store should be used:
-
-  ```javascript
-  var person = store.find(App.Person, 123);
-  ```
-
-  By default, the store will talk to your backend using a standard
-  REST mechanism. You can customize how the store talks to your
-  backend by specifying a custom adapter:
-
-  ```javascript
-   MyApp.store = DS.Store.create({
-     adapter: 'MyApp.CustomAdapter'
-   });
-   ```
-
-  You can learn more about writing a custom adapter by reading the `DS.Adapter`
-  documentation.
-
-  @class Store
-  @namespace DS
-  @extends Ember.Object
-*/
-DS.Store = Ember.Object.extend({
-
-  /**
-    @method init
-    @private
-  */
-  init: function() {
-    // internal bookkeeping; not observable
-    this.typeMaps = {};
-    this.recordArrayManager = DS.RecordArrayManager.create({
-      store: this
-    });
-    this._relationshipChanges = {};
-    this._pendingSave = [];
-  },
-
-  /**
-    The adapter to use to communicate to a backend server or other persistence layer.
-
-    This can be specified as an instance, class, or string.
-
-    If you want to specify `App.CustomAdapter` as a string, do:
-
-    ```js
-    adapter: 'custom'
-    ```
-
-    @property adapter
-    @default DS.RESTAdapter
-    @type {DS.Adapter|String}
-  */
-  adapter: '-rest',
-
-  /**
-    Returns a JSON representation of the record using a custom
-    type-specific serializer, if one exists.
-
-    The available options are:
-
-    * `includeId`: `true` if the record's ID should be included in
-      the JSON representation
-
-    @method serialize
-    @private
-    @param {DS.Model} record the record to serialize
-    @param {Object} options an options hash
-  */
-  serialize: function(record, options) {
-    return this.serializerFor(record.constructor.typeKey).serialize(record, options);
-  },
-
-  /**
-    This property returns the adapter, after resolving a possible
-    string key.
-
-    If the supplied `adapter` was a class, or a String property
-    path resolved to a class, this property will instantiate the
-    class.
-
-    This property is cacheable, so the same instance of a specified
-    adapter class should be used for the lifetime of the store.
-
-    @property defaultAdapter
-    @private
-    @returns DS.Adapter
-  */
-  defaultAdapter: Ember.computed('adapter', function() {
-    var adapter = get(this, 'adapter');
-
-    Ember.assert('You tried to set `adapter` property to an instance of `DS.Adapter`, where it should be a name or a factory', !(adapter instanceof DS.Adapter));
-
-    if (typeof adapter === 'string') {
-      adapter = this.container.lookup('adapter:' + adapter) || this.container.lookup('adapter:application') || this.container.lookup('adapter:-rest');
-    }
-
-    if (DS.Adapter.detect(adapter)) {
-      adapter = adapter.create({ container: this.container });
-    }
-
-    return adapter;
-  }),
-
-  // .....................
-  // . CREATE NEW RECORD .
-  // .....................
-
-  /**
-    Create a new record in the current store. The properties passed
-    to this method are set on the newly created record.
-
-    To create a new instance of `App.Post`:
-
-    ```js
-    store.createRecord('post', {
-      title: "Rails is omakase"
-    });
-    ```
-
-    @method createRecord
-    @param {String} type
-    @param {Object} properties a hash of properties to set on the
-      newly created record.
-    @returns {DS.Model} record
-  */
-  createRecord: function(type, properties) {
-    type = this.modelFor(type);
-
-    properties = copy(properties) || {};
-
-    // If the passed properties do not include a primary key,
-    // give the adapter an opportunity to generate one. Typically,
-    // client-side ID generators will use something like uuid.js
-    // to avoid conflicts.
-
-    if (isNone(properties.id)) {
-      properties.id = this._generateId(type);
-    }
-
-    // Coerce ID to a string
-    properties.id = coerceId(properties.id);
-
-    var record = this.buildRecord(type, properties.id);
-
-    // Move the record out of its initial `empty` state into
-    // the `loaded` state.
-    record.loadedData();
-
-    // Set the properties specified on the record.
-    record.setProperties(properties);
-
-    return record;
-  },
-
-  /**
-    If possible, this method asks the adapter to generate an ID for
-    a newly created record.
-
-    @method _generateId
-    @private
-    @param {String} type
-    @returns {String} if the adapter can generate one, an ID
-  */
-  _generateId: function(type) {
-    var adapter = this.adapterFor(type);
-
-    if (adapter && adapter.generateIdForRecord) {
-      return adapter.generateIdForRecord(this);
-    }
-
-    return null;
-  },
-
-  // .................
-  // . DELETE RECORD .
-  // .................
-
-  /**
-    For symmetry, a record can be deleted via the store.
-
-    Example
-
-    ```javascript
-    var post = store.createRecord('post', {
-      title: "Rails is omakase"
-    });
-
-    store.deleteRecord(post);
-    ```
-
-    @method deleteRecord
-    @param {DS.Model} record
-  */
-  deleteRecord: function(record) {
-    record.deleteRecord();
-  },
-
-  /**
-    For symmetry, a record can be unloaded via the store. Only
-    non-dirty records can be unloaded.
-
-    Example
-
-    ```javascript
-    store.find('post', 1).then(function(post) {
-      store.unloadRecord(post);
-    });
-    ```
-
-    @method unloadRecord
-    @param {DS.Model} record
-  */
-  unloadRecord: function(record) {
-    record.unloadRecord();
-  },
-
-  // ................
-  // . FIND RECORDS .
-  // ................
-
-  /**
-    This is the main entry point into finding records. The first parameter to
-    this method is the model's name as a string.
-
-    ---
-
-    To find a record by ID, pass the `id` as the second parameter:
-
-    ```javascript
-    store.find('person', 1);
-    ```
-
-    The `find` method will always return a **promise** that will be resolved
-    with the record. If the record was already in the store, the promise will
-    be resolved immediately. Otherwise, the store will ask the adapter's `find`
-    method to find the necessary data.
-
-    The `find` method will always resolve its promise with the same object for
-    a given type and `id`.
-
-    ---
-
-    To find all records for a type, call `find` with no additional parameters:
-
-    ```javascript
-    store.find('person');
-    ```
-
-    This will ask the adapter's `findAll` method to find the records for the
-    given type, and return a promise that will be resolved once the server
-    returns the values.
-
-    ---
-
-    To find a record by a query, call `find` with a hash as the second
-    parameter:
-
-    ```javascript
-    store.find(App.Person, { page: 1 });
-    ```
-
-    This will ask the adapter's `findQuery` method to find the records for
-    the query, and return a promise that will be resolved once the server
-    responds.
-
-    @method find
-    @param {String or subclass of DS.Model} type
-    @param {Object|String|Integer|null} id
-    @return {Promise} promise
-  */
-  find: function(type, id) {
-    if (id === undefined) {
-      return this.findAll(type);
-    }
-
-    // We are passed a query instead of an id.
-    if (Ember.typeOf(id) === 'object') {
-      return this.findQuery(type, id);
-    }
-
-    return this.findById(type, coerceId(id));
-  },
-
-  /**
-    This method returns a record for a given type and id combination.
-
-    @method findById
-    @private
-    @param {String or subclass of DS.Model} type
-    @param {String|Integer} id
-    @return {Promise} promise
-  */
-  findById: function(type, id) {
-    type = this.modelFor(type);
-
-    var record = this.recordForId(type, id);
-
-    var promise = this.fetchRecord(record) || resolve(record, "DS: Store#findById " + type + " with id: " + id);
-    return promiseObject(promise);
-  },
-
-  /**
-    This method makes a series of requests to the adapter's `find` method
-    and returns a promise that resolves once they are all loaded.
-
-    @private
-    @method findByIds
-    @param {String} type
-    @param {Array} ids
-    @returns {Promise} promise
-  */
-  findByIds: function(type, ids) {
-    var store = this;
-    var promiseLabel = "DS: Store#findByIds " + type;
-    return promiseArray(Ember.RSVP.all(map(ids, function(id) {
-      return store.findById(type, id);
-    })).then(Ember.A, null, "DS: Store#findByIds of " + type + " complete"));
-  },
-
-  /**
-    This method is called by `findById` if it discovers that a particular
-    type/id pair hasn't been loaded yet to kick off a request to the
-    adapter.
-
-    @method fetchRecord
-    @private
-    @param {DS.Model} record
-    @returns {Promise} promise
-  */
-  fetchRecord: function(record) {
-    if (isNone(record)) { return null; }
-    if (record._loadingPromise) { return record._loadingPromise; }
-    if (!get(record, 'isEmpty')) { return null; }
-
-    var type = record.constructor,
-        id = get(record, 'id');
-
-    var adapter = this.adapterFor(type);
-
-    Ember.assert("You tried to find a record but you have no adapter (for " + type + ")", adapter);
-    Ember.assert("You tried to find a record but your adapter (for " + type + ") does not implement 'find'", adapter.find);
-
-    var promise = _find(adapter, this, type, id);
-    record.loadingData(promise);
-    return promise;
-  },
-
-  /**
-    Get a record by a given type and ID without triggering a fetch.
-
-    This method will synchronously return the record if it's available.
-    Otherwise, it will return null.
-
-    ```js
-    var post = store.getById('post', 1);
-    ```
-
-    @method getById
-    @param {String or subclass of DS.Model} type
-    @param {String|Integer} id
-    @param {DS.Model} record
-  */
-  getById: function(type, id) {
-    if (this.hasRecordForId(type, id)) {
-      return this.recordForId(type, id);
-    } else {
-      return null;
-    }
-  },
-
-  /**
-    This method is called by the record's `reload` method.
-
-    This method calls the adapter's `find` method, which returns a promise. When
-    **that** promise resolves, `reloadRecord` will resolve the promise returned
-    by the record's `reload`.
-
-    @method reloadRecord
-    @private
-    @param {DS.Model} record
-    @return {Promise} promise
-  */
-  reloadRecord: function(record) {
-    var type = record.constructor,
-        adapter = this.adapterFor(type),
-        id = get(record, 'id');
-
-    Ember.assert("You cannot reload a record without an ID", id);
-    Ember.assert("You tried to reload a record but you have no adapter (for " + type + ")", adapter);
-    Ember.assert("You tried to reload a record but your adapter does not implement `find`", adapter.find);
-
-    return _find(adapter, this, type, id);
-  },
-
-  /**
-    This method takes a list of records, groups the records by type,
-    converts the records into IDs, and then invokes the adapter's `findMany`
-    method.
-
-    The records are grouped by type to invoke `findMany` on adapters
-    for each unique type in records.
-
-    It is used both by a brand new relationship (via the `findMany`
-    method) or when the data underlying an existing relationship
-    changes.
-
-    @method fetchMany
-    @private
-    @param {Array} records
-    @param {DS.Model} owner
-    @param {Resolver} resolver
-  */
-  fetchMany: function(records, owner, resolver) {
-    if (!records.length) { return; }
-
-    // Group By Type
-    var recordsByTypeMap = Ember.MapWithDefault.create({
-      defaultValue: function() { return Ember.A(); }
-    });
-
-    forEach(records, function(record) {
-      recordsByTypeMap.get(record.constructor).push(record);
-    });
-
-    forEach(recordsByTypeMap, function(type, records) {
-      var ids = records.mapProperty('id'),
-          adapter = this.adapterFor(type);
-
-      Ember.assert("You tried to load many records but you have no adapter (for " + type + ")", adapter);
-      Ember.assert("You tried to load many records but your adapter does not implement `findMany`", adapter.findMany);
-
-      resolver.resolve(_findMany(adapter, this, type, ids, owner));
-    }, this);
-  },
-
-  /**
-    Returns true if a record for a given type and ID is already loaded.
-
-    @method hasRecordForId
-    @param {String or subclass of DS.Model} type
-    @param {String|Integer} id
-    @returns {Boolean}
-  */
-  hasRecordForId: function(type, id) {
-    id = coerceId(id);
-    type = this.modelFor(type);
-    return !!this.typeMapFor(type).idToRecord[id];
-  },
-
-  /**
-    Returns id record for a given type and ID. If one isn't already loaded,
-    it builds a new record and leaves it in the `empty` state.
-
-    @method recordForId
-    @private
-    @param {String or subclass of DS.Model} type
-    @param {String|Integer} id
-    @returns {DS.Model} record
-  */
-  recordForId: function(type, id) {
-    type = this.modelFor(type);
-
-    id = coerceId(id);
-
-    var record = this.typeMapFor(type).idToRecord[id];
-
-    if (!record) {
-      record = this.buildRecord(type, id);
-    }
-
-    return record;
-  },
-
-  /**
-    @method findMany
-    @private
-    @param {DS.Model} owner
-    @param {Array} records
-    @param {String or subclass of DS.Model} type
-    @param {Resolver} resolver
-    @return {DS.ManyArray} records
-  */
-  findMany: function(owner, records, type, resolver) {
-    type = this.modelFor(type);
-
-    records = Ember.A(records);
-
-    var unloadedRecords = records.filterProperty('isEmpty', true),
-        manyArray = this.recordArrayManager.createManyArray(type, records);
-
-    forEach(unloadedRecords, function(record) {
-      record.loadingData();
-    });
-
-    manyArray.loadingRecordsCount = unloadedRecords.length;
-
-    if (unloadedRecords.length) {
-      forEach(unloadedRecords, function(record) {
-        this.recordArrayManager.registerWaitingRecordArray(record, manyArray);
-      }, this);
-
-      this.fetchMany(unloadedRecords, owner, resolver);
-    } else {
-      if (resolver) { resolver.resolve(); }
-      manyArray.set('isLoaded', true);
-      Ember.run.once(manyArray, 'trigger', 'didLoad');
-    }
-
-    return manyArray;
-  },
-
-  /**
-    If a relationship was originally populated by the adapter as a link
-    (as opposed to a list of IDs), this method is called when the
-    relationship is fetched.
-
-    The link (which is usually a URL) is passed through unchanged, so the
-    adapter can make whatever request it wants.
-
-    The usual use-case is for the server to register a URL as a link, and
-    then use that URL in the future to make a request for the relationship.
-
-    @method findHasMany
-    @private
-    @param {DS.Model} owner
-    @param {any} link
-    @param {String or subclass of DS.Model} type
-    @param {Resolver} resolver
-    @return {DS.ManyArray}
-  */
-  findHasMany: function(owner, link, relationship, resolver) {
-    var adapter = this.adapterFor(owner.constructor);
-
-    Ember.assert("You tried to load a hasMany relationship but you have no adapter (for " + owner.constructor + ")", adapter);
-    Ember.assert("You tried to load a hasMany relationship from a specified `link` in the original payload but your adapter does not implement `findHasMany`", adapter.findHasMany);
-
-    var records = this.recordArrayManager.createManyArray(relationship.type, Ember.A([]));
-    resolver.resolve(_findHasMany(adapter, this, owner, link, relationship));
-    return records;
-  },
-
-  /**
-    @method findBelongsTo
-    @private
-    @param {DS.Model} owner
-    @param {any} link
-    @param {Relationship} relationship
-    @param {Resolver} resolver
-  */
-  findBelongsTo: function(owner, link, relationship, resolver) {
-    var adapter = this.adapterFor(owner.constructor);
-
-    Ember.assert("You tried to load a belongsTo relationship but you have no adapter (for " + owner.constructor + ")", adapter);
-    Ember.assert("You tried to load a belongsTo relationship from a specified `link` in the original payload but your adapter does not implement `findBelongsTo`", adapter.findBelongsTo);
-
-    resolver.resolve(_findBelongsTo(adapter, this, owner, link, relationship));
-  },
-
-  /**
-    This method delegates a query to the adapter. This is the one place where
-    adapter-level semantics are exposed to the application.
-
-    Exposing queries this way seems preferable to creating an abstract query
-    language for all server-side queries, and then require all adapters to
-    implement them.
-
-    This method returns a promise, which is resolved with a `RecordArray`
-    once the server returns.
-
-    @method findQuery
-    @private
-    @param {String or subclass of DS.Model} type
-    @param {any} query an opaque query to be used by the adapter
-    @return {Promise} promise
-  */
-  findQuery: function(type, query) {
-    type = this.modelFor(type);
-
-    var array = this.recordArrayManager
-      .createAdapterPopulatedRecordArray(type, query);
-
-    var adapter = this.adapterFor(type),
-        promiseLabel = "DS: Store#findQuery " + type,
-        resolver = Ember.RSVP.defer(promiseLabel);
-
-    Ember.assert("You tried to load a query but you have no adapter (for " + type + ")", adapter);
-    Ember.assert("You tried to load a query but your adapter does not implement `findQuery`", adapter.findQuery);
-
-    resolver.resolve(_findQuery(adapter, this, type, query, array));
-
-    return promiseArray(resolver.promise);
-  },
-
-  /**
-    This method returns an array of all records adapter can find.
-    It triggers the adapter's `findAll` method to give it an opportunity to populate
-    the array with records of that type.
-
-    @method findAll
-    @private
-    @param {String or subclass of DS.Model} type
-    @return {DS.AdapterPopulatedRecordArray}
-  */
-  findAll: function(type) {
-    type = this.modelFor(type);
-
-    return this.fetchAll(type, this.all(type));
-  },
-
-  /**
-    @method fetchAll
-    @private
-    @param {DS.Model} type
-    @param {DS.RecordArray} array
-    @returns {Promise} promise
-  */
-  fetchAll: function(type, array) {
-    var adapter = this.adapterFor(type),
-        sinceToken = this.typeMapFor(type).metadata.since;
-
-    set(array, 'isUpdating', true);
-
-    Ember.assert("You tried to load all records but you have no adapter (for " + type + ")", adapter);
-    Ember.assert("You tried to load all records but your adapter does not implement `findAll`", adapter.findAll);
-
-    return promiseArray(_findAll(adapter, this, type, sinceToken));
-  },
-
-  /**
-    @method didUpdateAll
-    @param {DS.Model} type
-  */
-  didUpdateAll: function(type) {
-    var findAllCache = this.typeMapFor(type).findAllCache;
-    set(findAllCache, 'isUpdating', false);
-  },
-
-  /**
-    This method returns a filtered array that contains all of the known records
-    for a given type.
-
-    Note that because it's just a filter, it will have any locally
-    created records of the type.
-
-    Also note that multiple calls to `all` for a given type will always
-    return the same RecordArray.
-
-    Example
-
-    ```javascript
-    var local_posts = store.all(App.Post);
-    ```
-
-    @method all
-    @param {String or subclass of DS.Model} type
-    @return {DS.RecordArray}
-  */
-  all: function(type) {
-    type = this.modelFor(type);
-
-    var typeMap = this.typeMapFor(type),
-        findAllCache = typeMap.findAllCache;
-
-    if (findAllCache) { return findAllCache; }
-
-    var array = this.recordArrayManager.createRecordArray(type);
-
-    typeMap.findAllCache = array;
-    return array;
-  },
-
-
-  /**
-    This method unloads all of the known records for a given type.
-
-    ```javascript
-    store.unloadAll(App.Post);
-    ```
-
-    @method unloadAll
-    @param {String or subclass of DS.Model} type
-  */
-  unloadAll: function(type) {
-    type = this.modelFor(type);
-
-    var typeMap = this.typeMapFor(type),
-        records = typeMap.records.splice(0), record;
-
-    while(record = records.pop()) {
-      record.unloadRecord();
-    }
-
-    typeMap.findAllCache = null;
-  },
-
-  /**
-    Takes a type and filter function, and returns a live RecordArray that
-    remains up to date as new records are loaded into the store or created
-    locally.
-
-    The callback function takes a materialized record, and returns true
-    if the record should be included in the filter and false if it should
-    not.
-
-    The filter function is called once on all records for the type when
-    it is created, and then once on each newly loaded or created record.
-
-    If any of a record's properties change, or if it changes state, the
-    filter function will be invoked again to determine whether it should
-    still be in the array.
-
-    Optionally you can pass a query which will be triggered at first. The
-    results returned by the server could then appear in the filter if they
-    match the filter function.
-
-    Example
-
-    ```javascript
-    store.filter(App.Post, {unread: true}, function(post) {
-      return post.get('unread');
-    }).then(function(unreadPosts) {
-      unreadPosts.get('length'); // 5
-      var unreadPost = unreadPosts.objectAt(0);
-      unreadPost.set('unread', false);
-      unreadPosts.get('length'); // 4
-    });
-    ```
-
-    @method filter
-    @param {String or subclass of DS.Model} type
-    @param {Object} query optional query
-    @param {Function} filter
-    @return {DS.PromiseArray}
-  */
-  filter: function(type, query, filter) {
-    var promise;
-
-    // allow an optional server query
-    if (arguments.length === 3) {
-      promise = this.findQuery(type, query);
-    } else if (arguments.length === 2) {
-      filter = query;
-    }
-
-    type = this.modelFor(type);
-
-    var array = this.recordArrayManager
-      .createFilteredRecordArray(type, filter);
-    promise = promise || resolve(array);
-
-    return promiseArray(promise.then(function() {
-      return array;
-    }, null, "DS: Store#filter of " + type));
-  },
-
-  /**
-    This method returns if a certain record is already loaded
-    in the store. Use this function to know beforehand if a find()
-    will result in a request or that it will be a cache hit.
-
-     Example
-
-    ```javascript
-    store.recordIsLoaded(App.Post, 1); // false
-    store.find(App.Post, 1).then(function() {
-      store.recordIsLoaded(App.Post, 1); // true
-    });
-    ```
-
-    @method recordIsLoaded
-    @param {String or subclass of DS.Model} type
-    @param {string} id
-    @return {boolean}
-  */
-  recordIsLoaded: function(type, id) {
-    if (!this.hasRecordForId(type, id)) { return false; }
-    return !get(this.recordForId(type, id), 'isEmpty');
-  },
-
-  /**
-    This method returns the metadata for a specific type.
-
-    @method metadataFor
-    @param {String or subclass of DS.Model} type
-    @return {object}
-  */
-  metadataFor: function(type) {
-    type = this.modelFor(type);
-    return this.typeMapFor(type).metadata;
-  },
-
-  // ............
-  // . UPDATING .
-  // ............
-
-  /**
-    If the adapter updates attributes or acknowledges creation
-    or deletion, the record will notify the store to update its
-    membership in any filters.
-    To avoid thrashing, this method is invoked only once per
-
-    run loop per record.
-
-    @method dataWasUpdated
-    @private
-    @param {Class} type
-    @param {DS.Model} record
-  */
-  dataWasUpdated: function(type, record) {
-    this.recordArrayManager.recordDidChange(record);
-  },
-
-  // ..............
-  // . PERSISTING .
-  // ..............
-
-  /**
-    This method is called by `record.save`, and gets passed a
-    resolver for the promise that `record.save` returns.
-
-    It schedules saving to happen at the end of the run loop.
-
-    @method scheduleSave
-    @private
-    @param {DS.Model} record
-    @param {Resolver} resolver
-  */
-  scheduleSave: function(record, resolver) {
-    record.adapterWillCommit();
-    this._pendingSave.push([record, resolver]);
-    once(this, 'flushPendingSave');
-  },
-
-  /**
-    This method is called at the end of the run loop, and
-    flushes any records passed into `scheduleSave`
-
-    @method flushPendingSave
-    @private
-  */
-  flushPendingSave: function() {
-    var pending = this._pendingSave.slice();
-    this._pendingSave = [];
-
-    forEach(pending, function(tuple) {
-      var record = tuple[0], resolver = tuple[1],
-          adapter = this.adapterFor(record.constructor),
-          operation;
-
-      if (get(record, 'isNew')) {
-        operation = 'createRecord';
-      } else if (get(record, 'isDeleted')) {
-        operation = 'deleteRecord';
-      } else {
-        operation = 'updateRecord';
-      }
-
-      resolver.resolve(_commit(adapter, this, operation, record));
-    }, this);
-  },
-
-  /**
-    This method is called once the promise returned by an
-    adapter's `createRecord`, `updateRecord` or `deleteRecord`
-    is resolved.
-
-    If the data provides a server-generated ID, it will
-    update the record and the store's indexes.
-
-    @method didSaveRecord
-    @private
-    @param {DS.Model} record the in-flight record
-    @param {Object} data optional data (see above)
-  */
-  didSaveRecord: function(record, data) {
-    if (data) {
-      // normalize relationship IDs into records
-      data = normalizeRelationships(this, record.constructor, data, record);
-
-      this.updateId(record, data);
-    }
-
-    record.adapterDidCommit(data);
-  },
-
-  /**
-    This method is called once the promise returned by an
-    adapter's `createRecord`, `updateRecord` or `deleteRecord`
-    is rejected with a `DS.InvalidError`.
-
-    @method recordWasInvalid
-    @private
-    @param {DS.Model} record
-    @param {Object} errors
-  */
-  recordWasInvalid: function(record, errors) {
-    record.adapterDidInvalidate(errors);
-  },
-
-  /**
-    This method is called once the promise returned by an
-    adapter's `createRecord`, `updateRecord` or `deleteRecord`
-    is rejected (with anything other than a `DS.InvalidError`).
-
-    @method recordWasError
-    @private
-    @param {DS.Model} record
-  */
-  recordWasError: function(record) {
-    record.adapterDidError();
-  },
-
-  /**
-    When an adapter's `createRecord`, `updateRecord` or `deleteRecord`
-    resolves with data, this method extracts the ID from the supplied
-    data.
-
-    @method updateId
-    @private
-    @param {DS.Model} record
-    @param {Object} data
-  */
-  updateId: function(record, data) {
-    var oldId = get(record, 'id'),
-        id = coerceId(data.id);
-
-    Ember.assert("An adapter cannot assign a new id to a record that already has an id. " + record + " had id: " + oldId + " and you tried to update it with " + id + ". This likely happened because your server returned data in response to a find or update that had a different id than the one you sent.", oldId === null || id === oldId);
-
-    this.typeMapFor(record.constructor).idToRecord[id] = record;
-
-    set(record, 'id', id);
-  },
-
-  /**
-    Returns a map of IDs to client IDs for a given type.
-
-    @method typeMapFor
-    @private
-    @param type
-    @return {Object} typeMap
-  */
-  typeMapFor: function(type) {
-    var typeMaps = get(this, 'typeMaps'),
-        guid = Ember.guidFor(type),
-        typeMap;
-
-    typeMap = typeMaps[guid];
-
-    if (typeMap) { return typeMap; }
-
-    typeMap = {
-      idToRecord: {},
-      records: [],
-      metadata: {}
-    };
-
-    typeMaps[guid] = typeMap;
-
-    return typeMap;
-  },
-
-  // ................
-  // . LOADING DATA .
-  // ................
-
-  /**
-    This internal method is used by `push`.
-
-    @method _load
-    @private
-    @param {String or subclass of DS.Model} type
-    @param {Object} data
-    @param {Boolean} partial the data should be merged into
-      the existing data, not replace it.
-  */
-  _load: function(type, data, partial) {
-    var id = coerceId(data.id),
-        record = this.recordForId(type, id);
-
-    record.setupData(data, partial);
-    this.recordArrayManager.recordDidChange(record);
-
-    return record;
-  },
-
-  /**
-    Returns a model class for a particular key. Used by
-    methods that take a type key (like `find`, `createRecord`,
-    etc.)
-
-    @method modelFor
-    @param {String or subclass of DS.Model} key
-    @returns {subclass of DS.Model}
-  */
-  modelFor: function(key) {
-    var factory;
-
-
-    if (typeof key === 'string') {
-      var normalizedKey = this.container.normalize('model:' + key);
-
-      factory = this.container.lookupFactory(normalizedKey);
-      if (!factory) { throw new Ember.Error("No model was found for '" + key + "'"); }
-      factory.typeKey = normalizedKey.split(':', 2)[1];
-    } else {
-      // A factory already supplied.
-      factory = key;
-    }
-
-    factory.store = this;
-    return factory;
-  },
-
-  /**
-    Push some data for a given type into the store.
-
-    This method expects normalized data:
-
-    * The ID is a key named `id` (an ID is mandatory)
-    * The names of attributes are the ones you used in
-      your model's `DS.attr`s.
-    * Your relationships must be:
-      * represented as IDs or Arrays of IDs
-      * represented as model instances
-      * represented as URLs, under the `links` key
-
-    For this model:
-
-    ```js
-    App.Person = DS.Model.extend({
-      firstName: DS.attr(),
-      lastName: DS.attr(),
-
-      children: DS.hasMany('person')
-    });
-    ```
-
-    To represent the children as IDs:
-
-    ```js
-    {
-      id: 1,
-      firstName: "Tom",
-      lastName: "Dale",
-      children: [1, 2, 3]
-    }
-    ```
-
-    To represent the children relationship as a URL:
-
-    ```js
-    {
-      id: 1,
-      firstName: "Tom",
-      lastName: "Dale",
-      links: {
-        children: "/people/1/children"
-      }
-    }
-    ```
-
-    If you're streaming data or implementing an adapter,
-    make sure that you have converted the incoming data
-    into this form.
-
-    This method can be used both to push in brand new
-    records, as well as to update existing records.
-
-    @method push
-    @param {String or subclass of DS.Model} type
-    @param {Object} data
-    @returns {DS.Model} the record that was created or
-      updated.
-  */
-  push: function(type, data, _partial) {
-    // _partial is an internal param used by `update`.
-    // If passed, it means that the data should be
-    // merged into the existing data, not replace it.
-
-    Ember.assert("You must include an `id` in a hash passed to `push`", data.id != null);
-
-    type = this.modelFor(type);
-
-    // normalize relationship IDs into records
-    data = normalizeRelationships(this, type, data);
-
-    this._load(type, data, _partial);
-
-    return this.recordForId(type, data.id);
-  },
-
-  /**
-    Push some raw data into the store.
-
-    The data will be automatically deserialized using the
-    serializer for the `type` param.
-
-    This method can be used both to push in brand new
-    records, as well as to update existing records.
-
-    You can push in more than one type of object at once.
-    All objects should be in the format expected by the
-    serializer.
-
-    ```js
-    App.ApplicationSerializer = DS.ActiveModelSerializer;
-
-    var pushData = {
-      posts: [
-        {id: 1, post_title: "Great post", comment_ids: [2]}
-      ],
-      comments: [
-        {id: 2, comment_body: "Insightful comment"}
-      ]
-    }
-
-    store.pushPayload('post', pushData);
-    ```
-
-    @method pushPayload
-    @param {String} type
-    @param {Object} payload
-    @return {DS.Model} the record that was created or updated.
-  */
-  pushPayload: function (type, payload) {
-    var serializer;
-    if (!payload) {
-      payload = type;
-      serializer = defaultSerializer(this.container);
-      Ember.assert("You cannot use `store#pushPayload` without a type unless your default serializer defines `pushPayload`", serializer.pushPayload);
-    } else {
-      serializer = this.serializerFor(type);
-    }
-    serializer.pushPayload(this, payload);
-  },
-
-  update: function(type, data) {
-    Ember.assert("You must include an `id` in a hash passed to `update`", data.id != null);
-
-    return this.push(type, data, true);
-  },
-
-  /**
-    If you have an Array of normalized data to push,
-    you can call `pushMany` with the Array, and it will
-    call `push` repeatedly for you.
-
-    @method pushMany
-    @param {String or subclass of DS.Model} type
-    @param {Array} datas
-    @return {Array}
-  */
-  pushMany: function(type, datas) {
-    return map(datas, function(data) {
-      return this.push(type, data);
-    }, this);
-  },
-
-  /**
-    If you have some metadata to set for a type
-    you can call `metaForType`.
-
-    @method metaForType
-    @param {String or subclass of DS.Model} type
-    @param {Object} metadata
-  */
-  metaForType: function(type, metadata) {
-    type = this.modelFor(type);
-
-    Ember.merge(this.typeMapFor(type).metadata, metadata);
-  },
-
-  /**
-    Build a brand new record for a given type, ID, and
-    initial data.
-
-    @method buildRecord
-    @private
-    @param {subclass of DS.Model} type
-    @param {String} id
-    @param {Object} data
-    @returns {DS.Model} record
-  */
-  buildRecord: function(type, id, data) {
-    var typeMap = this.typeMapFor(type),
-        idToRecord = typeMap.idToRecord;
-
-    Ember.assert('The id ' + id + ' has already been used with another record of type ' + type.toString() + '.', !id || !idToRecord[id]);
-
-    // lookupFactory should really return an object that creates
-    // instances with the injections applied
-    var record = type._create({
-      id: id,
-      store: this,
-      container: this.container
-    });
-
-    if (data) {
-      record.setupData(data);
-    }
-
-    // if we're creating an item, this process will be done
-    // later, once the object has been persisted.
-    if (id) {
-      idToRecord[id] = record;
-    }
-
-    typeMap.records.push(record);
-
-    return record;
-  },
-
-  // ...............
-  // . DESTRUCTION .
-  // ...............
-
-  /**
-    When a record is destroyed, this un-indexes it and
-    removes it from any record arrays so it can be GCed.
-
-    @method dematerializeRecord
-    @private
-    @param {DS.Model} record
-  */
-  dematerializeRecord: function(record) {
-    var type = record.constructor,
-        typeMap = this.typeMapFor(type),
-        id = get(record, 'id');
-
-    record.updateRecordArrays();
-
-    if (id) {
-      delete typeMap.idToRecord[id];
-    }
-
-    var loc = indexOf(typeMap.records, record);
-    typeMap.records.splice(loc, 1);
-  },
-
-  // ........................
-  // . RELATIONSHIP CHANGES .
-  // ........................
-
-  addRelationshipChangeFor: function(childRecord, childKey, pa

<TRUNCATED>

[32/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/font/fontawesome-webfont.svg
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/font/fontawesome-webfont.svg b/contrib/views/slider/src/main/resources/ui/app/assets/font/fontawesome-webfont.svg
deleted file mode 100644
index 2edb4ec..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/font/fontawesome-webfont.svg
+++ /dev/null
@@ -1,399 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="fontawesomeregular" horiz-adv-x="1536" >
-<font-face units-per-em="1792" ascent="1536" descent="-256" />
-<missing-glyph horiz-adv-x="448" />
-<glyph unicode=" "  horiz-adv-x="448" />
-<glyph unicode="&#x09;" horiz-adv-x="448" />
-<glyph unicode="&#xa0;" horiz-adv-x="448" />
-<glyph unicode="&#xa8;" horiz-adv-x="1792" />
-<glyph unicode="&#xa9;" horiz-adv-x="1792" />
-<glyph unicode="&#xae;" horiz-adv-x="1792" />
-<glyph unicode="&#xb4;" horiz-adv-x="1792" />
-<glyph unicode="&#xc6;" horiz-adv-x="1792" />
-<glyph unicode="&#x2000;" horiz-adv-x="768" />
-<glyph unicode="&#x2001;" />
-<glyph unicode="&#x2002;" horiz-adv-x="768" />
-<glyph unicode="&#x2003;" />
-<glyph unicode="&#x2004;" horiz-adv-x="512" />
-<glyph unicode="&#x2005;" horiz-adv-x="384" />
-<glyph unicode="&#x2006;" horiz-adv-x="256" />
-<glyph unicode="&#x2007;" horiz-adv-x="256" />
-<glyph unicode="&#x2008;" horiz-adv-x="192" />
-<glyph unicode="&#x2009;" horiz-adv-x="307" />
-<glyph unicode="&#x200a;" horiz-adv-x="85" />
-<glyph unicode="&#x202f;" horiz-adv-x="307" />
-<glyph unicode="&#x205f;" horiz-adv-x="384" />
-<glyph unicode="&#x2122;" horiz-adv-x="1792" />
-<glyph unicode="&#x221e;" horiz-adv-x="1792" />
-<glyph unicode="&#x2260;" horiz-adv-x="1792" />
-<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
-<glyph unicode="&#xf000;" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
-<glyph unicode="&#xf001;" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf002;" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
-<glyph unicode="&#xf003;" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf004;" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
-<glyph unicode="&#xf005;" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
-<glyph unicode="&#xf006;" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
-<glyph unicode="&#xf007;" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
-<glyph unicode="&#xf008;" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t1
 9 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf009;" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf00a;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28
 t28 -68z" />
-<glyph unicode="&#xf00b;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf00c;" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
-<glyph unicode="&#xf00d;" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
-<glyph unicode="&#xf00e;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
-<glyph unicode="&#xf010;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />
-<glyph unicode="&#xf011;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
-<glyph unicode="&#xf012;" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf013;" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
-<glyph unicode="&#xf014;" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf015;" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
-<glyph unicode="&#xf016;" horiz-adv-x="1280" d="M128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280zM768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z " />
-<glyph unicode="&#xf017;" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf018;" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
-<glyph unicode="&#xf019;" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
-<glyph unicode="&#xf01a;" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01b;" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01c;" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
-<glyph unicode="&#xf01d;" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01e;" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
-<glyph unicode="&#xf021;" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf022;" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -1
 13 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" />
-<glyph unicode="&#xf023;" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf024;" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf025;" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
-<glyph unicode="&#xf026;" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf027;" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
-<glyph unicode="&#xf028;" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
-<glyph unicode="&#xf029;" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
-<glyph unicode="&#xf02a;" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
-<glyph unicode="&#xf02b;" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
-<glyph unicode="&#xf02c;" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
-<glyph unicode="&#xf02d;" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
-<glyph unicode="&#xf02e;" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
-<glyph unicode="&#xf02f;" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
-<glyph unicode="&#xf030;" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
-<glyph unicode="&#xf031;" horiz-adv-x="1664" d="M725 977l-170 -450q73 -1 153.5 -2t119 -1.5t52.5 -0.5l29 2q-32 95 -92 241q-53 132 -92 211zM21 -128h-21l2 79q22 7 80 18q89 16 110 31q20 16 48 68l237 616l280 724h75h53l11 -21l205 -480q103 -242 124 -297q39 -102 96 -235q26 -58 65 -164q24 -67 65 -149 q22 -49 35 -57q22 -19 69 -23q47 -6 103 -27q6 -39 6 -57q0 -14 -1 -26q-80 0 -192 8q-93 8 -189 8q-79 0 -135 -2l-200 -11l-58 -2q0 45 4 78l131 28q56 13 68 23q12 12 12 27t-6 32l-47 114l-92 228l-450 2q-29 -65 -104 -274q-23 -64 -23 -84q0 -31 17 -43 q26 -21 103 -32q3 0 13.5 -2t30 -5t40.5 -6q1 -28 1 -58q0 -17 -2 -27q-66 0 -349 20l-48 -8q-81 -14 -167 -14z" />
-<glyph unicode="&#xf032;" horiz-adv-x="1408" d="M555 15q76 -32 140 -32q131 0 216 41t122 113q38 70 38 181q0 114 -41 180q-58 94 -141 126q-80 32 -247 32q-74 0 -101 -10v-144l-1 -173l3 -270q0 -15 12 -44zM541 761q43 -7 109 -7q175 0 264 65t89 224q0 112 -85 187q-84 75 -255 75q-52 0 -130 -13q0 -44 2 -77 q7 -122 6 -279l-1 -98q0 -43 1 -77zM0 -128l2 94q45 9 68 12q77 12 123 31q17 27 21 51q9 66 9 194l-2 497q-5 256 -9 404q-1 87 -11 109q-1 4 -12 12q-18 12 -69 15q-30 2 -114 13l-4 83l260 6l380 13l45 1q5 0 14 0.5t14 0.5q1 0 21.5 -0.5t40.5 -0.5h74q88 0 191 -27 q43 -13 96 -39q57 -29 102 -76q44 -47 65 -104t21 -122q0 -70 -32 -128t-95 -105q-26 -20 -150 -77q177 -41 267 -146q92 -106 92 -236q0 -76 -29 -161q-21 -62 -71 -117q-66 -72 -140 -108q-73 -36 -203 -60q-82 -15 -198 -11l-197 4q-84 2 -298 -11q-33 -3 -272 -11z" />
-<glyph unicode="&#xf033;" horiz-adv-x="1024" d="M0 -126l17 85q4 1 77 20q76 19 116 39q29 37 41 101l27 139l56 268l12 64q8 44 17 84.5t16 67t12.5 46.5t9 30.5t3.5 11.5l29 157l16 63l22 135l8 50v38q-41 22 -144 28q-28 2 -38 4l19 103l317 -14q39 -2 73 -2q66 0 214 9q33 2 68 4.5t36 2.5q-2 -19 -6 -38 q-7 -29 -13 -51q-55 -19 -109 -31q-64 -16 -101 -31q-12 -31 -24 -88q-9 -44 -13 -82q-44 -199 -66 -306l-61 -311l-38 -158l-43 -235l-12 -45q-2 -7 1 -27q64 -15 119 -21q36 -5 66 -10q-1 -29 -7 -58q-7 -31 -9 -41q-18 0 -23 -1q-24 -2 -42 -2q-9 0 -28 3q-19 4 -145 17 l-198 2q-41 1 -174 -11q-74 -7 -98 -9z" />
-<glyph unicode="&#xf034;" horiz-adv-x="1792" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l215 -1h293l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -42.5 2t-103.5 -1t-111 -1 q-34 0 -67 -5q-10 -97 -8 -136l1 -152v-332l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-88 0 -233 -14q-48 -4 -70 -4q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q8 192 6 433l-5 428q-1 62 -0.5 118.5t0.5 102.5t-2 57t-6 15q-6 5 -14 6q-38 6 -148 6q-43 0 -100 -13.5t-73 -24.5q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1744 128q33 0 42 -18.5t-11 -44.5 l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80z" />
-<glyph unicode="&#xf035;" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l446 -1h318l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -58.5 2t-138.5 -1t-128 -1 q-94 0 -127 -5q-10 -97 -8 -136l1 -152v52l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-82 0 -233 -13q-45 -5 -70 -5q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q6 137 6 433l-5 44q0 265 -2 278q-2 11 -6 15q-6 5 -14 6q-38 6 -148 6q-50 0 -168.5 -14t-132.5 -24q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1505 113q26 -20 26 -49t-26 -49l-162 -126 q-26 -20 -44.5 -11t-18.5 42v80h-1024v-80q0 -33 -18.5 -42t-44.5 11l-162 126q-26 20 -26 49t26 49l162 126q26 20 44.5 11t18.5 -42v-80h1024v80q0 33 18.5 42t44.5 -11z" />
-<glyph unicode="&#xf036;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf037;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf038;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf039;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf03a;" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t
 -22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03b;" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03c;" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03d;" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" />
-<glyph unicode="&#xf03e;" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf040;" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
-<glyph unicode="&#xf041;" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
-<glyph unicode="&#xf042;" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf043;" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
-<glyph unicode="&#xf044;" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
-<glyph unicode="&#xf045;" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
-<glyph unicode="&#xf046;" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" />
-<glyph unicode="&#xf047;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf048;" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
-<glyph unicode="&#xf049;" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
-<glyph unicode="&#xf04a;" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
-<glyph unicode="&#xf04b;" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
-<glyph unicode="&#xf04c;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf04d;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf04e;" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
-<glyph unicode="&#xf050;" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
-<glyph unicode="&#xf051;" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
-<glyph unicode="&#xf052;" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
-<glyph unicode="&#xf053;" horiz-adv-x="1152" d="M742 -37l-652 651q-37 37 -37 90.5t37 90.5l652 651q37 37 90.5 37t90.5 -37l75 -75q37 -37 37 -90.5t-37 -90.5l-486 -486l486 -485q37 -38 37 -91t-37 -90l-75 -75q-37 -37 -90.5 -37t-90.5 37z" />
-<glyph unicode="&#xf054;" horiz-adv-x="1152" d="M1099 704q0 -52 -37 -91l-652 -651q-37 -37 -90 -37t-90 37l-76 75q-37 39 -37 91q0 53 37 90l486 486l-486 485q-37 39 -37 91q0 53 37 90l76 75q36 38 90 38t90 -38l652 -651q37 -37 37 -90z" />
-<glyph unicode="&#xf055;" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf056;" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
-<glyph unicode="&#xf057;" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf058;" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf059;" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05a;" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05b;" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf05c;" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05d;" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05e;" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
-<glyph unicode="&#xf060;" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
-<glyph unicode="&#xf061;" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
-<glyph unicode="&#xf062;" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
-<glyph unicode="&#xf063;" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
-<glyph unicode="&#xf064;" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
-<glyph unicode="&#xf065;" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf066;" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
-<glyph unicode="&#xf067;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf068;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf069;" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
-<glyph unicode="&#xf06a;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
-<glyph unicode="&#xf06b;" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf06c;" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
-<glyph unicode="&#xf06d;" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
-<glyph unicode="&#xf06e;" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
-<glyph unicode="&#xf070;" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " />
-<glyph unicode="&#xf071;" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
-<glyph unicode="&#xf072;" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
-<glyph unicode="&#xf073;" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf074;" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
-<glyph unicode="&#xf075;" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
-<glyph unicode="&#xf076;" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf077;" horiz-adv-x="1664" d="M1611 320q0 -53 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-486 485l-486 -485q-36 -38 -90 -38t-90 38l-75 75q-38 36 -38 90q0 53 38 91l651 651q37 37 90 37q52 0 91 -37l650 -651q38 -38 38 -91z" />
-<glyph unicode="&#xf078;" horiz-adv-x="1664" d="M1611 832q0 -53 -37 -90l-651 -651q-38 -38 -91 -38q-54 0 -90 38l-651 651q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l486 -486l486 486q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
-<glyph unicode="&#xf079;" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " />
-<glyph unicode="&#xf07a;" horiz-adv-x="1664" d="M640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5 l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5 t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf07b;" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf07c;" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf07d;" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf07e;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf080;" horiz-adv-x="1920" d="M512 512v-384h-256v384h256zM896 1024v-896h-256v896h256zM1280 768v-640h-256v640h256zM1664 1152v-1024h-256v1024h256zM1792 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5z M1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf081;" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf082;" d="M1307 618l23 219h-198v109q0 49 15.5 68.5t71.5 19.5h110v219h-175q-152 0 -218 -72t-66 -213v-131h-131v-219h131v-635h262v635h175zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf083;" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
-<glyph unicode="&#xf084;" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
-<glyph unicode="&#xf085;" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 
 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
-<glyph unicode="&#xf086;" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
-<glyph unicode="&#xf087;" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
-<glyph unicode="&#xf088;" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" />
-<glyph unicode="&#xf089;" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
-<glyph unicode="&#xf08a;" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" />
-<glyph unicode="&#xf08b;" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
-<glyph unicode="&#xf08c;" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf08d;" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
-<glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf090;" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf091;" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf092;" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 
 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf093;" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
-<glyph unicode="&#xf094;" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
-<glyph unicode="&#xf095;" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
-<glyph unicode="&#xf096;" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf097;" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
-<glyph unicode="&#xf098;" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf099;" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
-<glyph unicode="&#xf09a;" horiz-adv-x="768" d="M511 980h257l-30 -284h-227v-824h-341v824h-170v284h170v171q0 182 86 275.5t283 93.5h227v-284h-142q-39 0 -62.5 -6.5t-34 -23.5t-13.5 -34.5t-3 -49.5v-142z" />
-<glyph unicode="&#xf09b;" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
-<glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
-<glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
-<glyph unicode="&#xf0a0;" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
-<glyph unicode="&#xf0a1;" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
-<glyph unicode="&#xf0a2;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM183 128h1298q-164 181 -246.5 411.5t-82.5 484.5q0 256 -320 256t-320 -256q0 -254 -82.5 -484.5t-246.5 -411.5zM1664 128q0 -52 -38 -90t-90 -38 h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
-<glyph unicode="&#xf0a3;" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
-<glyph unicode="&#xf0a4;" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
-<glyph unicode="&#xf0a5;" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
-<glyph unicode="&#xf0a6;" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
-<glyph unicode="&#xf0a7;" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
-<glyph unicode="&#xf0a8;" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0a9;" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0aa;" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0ab;" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0ac;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17
 t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-1
 5 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q
 -15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 

<TRUNCATED>

[29/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/sinon-1.13.0.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/sinon-1.13.0.js b/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/sinon-1.13.0.js
deleted file mode 100644
index 31ab75e..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/javascripts/sinon-1.13.0.js
+++ /dev/null
@@ -1,5830 +0,0 @@
-/**
- * Sinon.JS 1.13.0, 2015/03/05
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS
- *
- * (The BSD License)
- * 
- * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 
- *     * Redistributions of source code must retain the above copyright notice,
- *       this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright notice,
- *       this list of conditions and the following disclaimer in the documentation
- *       and/or other materials provided with the distribution.
- *     * Neither the name of Christian Johansen nor the names of his contributors
- *       may be used to endorse or promote products derived from this software
- *       without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-(function (root, factory) {
-  if (typeof define === 'function' && define.amd) {
-    define('sinon', [], function () {
-      return (root.sinon = factory());
-    });
-  } else if (typeof exports === 'object') {
-    module.exports = factory();
-  } else {
-    root.sinon = factory();
-  }
-}(this, function () {
-  var samsam, formatio;
-  (function () {
-                function define(mod, deps, fn) {
-                  if (mod == "samsam") {
-                    samsam = deps();
-                  } else if (typeof deps === "function" && mod.length === 0) {
-                    lolex = deps();
-                  } else if (typeof fn === "function") {
-                    formatio = fn(samsam);
-                  }
-                }
-    define.amd = {};
-((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) ||
- (typeof module === "object" &&
-      function (m) { module.exports = m(); }) || // Node
- function (m) { this.samsam = m(); } // Browser globals
-)(function () {
-    var o = Object.prototype;
-    var div = typeof document !== "undefined" && document.createElement("div");
-
-    function isNaN(value) {
-        // Unlike global isNaN, this avoids type coercion
-        // typeof check avoids IE host object issues, hat tip to
-        // lodash
-        var val = value; // JsLint thinks value !== value is "weird"
-        return typeof value === "number" && value !== val;
-    }
-
-    function getClass(value) {
-        // Returns the internal [[Class]] by calling Object.prototype.toString
-        // with the provided value as this. Return value is a string, naming the
-        // internal class, e.g. "Array"
-        return o.toString.call(value).split(/[ \]]/)[1];
-    }
-
-    /**
-     * @name samsam.isArguments
-     * @param Object object
-     *
-     * Returns ``true`` if ``object`` is an ``arguments`` object,
-     * ``false`` otherwise.
-     */
-    function isArguments(object) {
-        if (getClass(object) === 'Arguments') { return true; }
-        if (typeof object !== "object" || typeof object.length !== "number" ||
-                getClass(object) === "Array") {
-            return false;
-        }
-        if (typeof object.callee == "function") { return true; }
-        try {
-            object[object.length] = 6;
-            delete object[object.length];
-        } catch (e) {
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * @name samsam.isElement
-     * @param Object object
-     *
-     * Returns ``true`` if ``object`` is a DOM element node. Unlike
-     * Underscore.js/lodash, this function will return ``false`` if ``object``
-     * is an *element-like* object, i.e. a regular object with a ``nodeType``
-     * property that holds the value ``1``.
-     */
-    function isElement(object) {
-        if (!object || object.nodeType !== 1 || !div) { return false; }
-        try {
-            object.appendChild(div);
-            object.removeChild(div);
-        } catch (e) {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * @name samsam.keys
-     * @param Object object
-     *
-     * Return an array of own property names.
-     */
-    function keys(object) {
-        var ks = [], prop;
-        for (prop in object) {
-            if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); }
-        }
-        return ks;
-    }
-
-    /**
-     * @name samsam.isDate
-     * @param Object value
-     *
-     * Returns true if the object is a ``Date``, or *date-like*. Duck typing
-     * of date objects work by checking that the object has a ``getTime``
-     * function whose return value equals the return value from the object's
-     * ``valueOf``.
-     */
-    function isDate(value) {
-        return typeof value.getTime == "function" &&
-            value.getTime() == value.valueOf();
-    }
-
-    /**
-     * @name samsam.isNegZero
-     * @param Object value
-     *
-     * Returns ``true`` if ``value`` is ``-0``.
-     */
-    function isNegZero(value) {
-        return value === 0 && 1 / value === -Infinity;
-    }
-
-    /**
-     * @name samsam.equal
-     * @param Object obj1
-     * @param Object obj2
-     *
-     * Returns ``true`` if two objects are strictly equal. Compared to
-     * ``===`` there are two exceptions:
-     *
-     *   - NaN is considered equal to NaN
-     *   - -0 and +0 are not considered equal
-     */
-    function identical(obj1, obj2) {
-        if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) {
-            return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2);
-        }
-    }
-
-
-    /**
-     * @name samsam.deepEqual
-     * @param Object obj1
-     * @param Object obj2
-     *
-     * Deep equal comparison. Two values are "deep equal" if:
-     *
-     *   - They are equal, according to samsam.identical
-     *   - They are both date objects representing the same time
-     *   - They are both arrays containing elements that are all deepEqual
-     *   - They are objects with the same set of properties, and each property
-     *     in ``obj1`` is deepEqual to the corresponding property in ``obj2``
-     *
-     * Supports cyclic objects.
-     */
-    function deepEqualCyclic(obj1, obj2) {
-
-        // used for cyclic comparison
-        // contain already visited objects
-        var objects1 = [],
-            objects2 = [],
-        // contain pathes (position in the object structure)
-        // of the already visited objects
-        // indexes same as in objects arrays
-            paths1 = [],
-            paths2 = [],
-        // contains combinations of already compared objects
-        // in the manner: { "$1['ref']$2['ref']": true }
-            compared = {};
-
-        /**
-         * used to check, if the value of a property is an object
-         * (cyclic logic is only needed for objects)
-         * only needed for cyclic logic
-         */
-        function isObject(value) {
-
-            if (typeof value === 'object' && value !== null &&
-                    !(value instanceof Boolean) &&
-                    !(value instanceof Date)    &&
-                    !(value instanceof Number)  &&
-                    !(value instanceof RegExp)  &&
-                    !(value instanceof String)) {
-
-                return true;
-            }
-
-            return false;
-        }
-
-        /**
-         * returns the index of the given object in the
-         * given objects array, -1 if not contained
-         * only needed for cyclic logic
-         */
-        function getIndex(objects, obj) {
-
-            var i;
-            for (i = 0; i < objects.length; i++) {
-                if (objects[i] === obj) {
-                    return i;
-                }
-            }
-
-            return -1;
-        }
-
-        // does the recursion for the deep equal check
-        return (function deepEqual(obj1, obj2, path1, path2) {
-            var type1 = typeof obj1;
-            var type2 = typeof obj2;
-
-            // == null also matches undefined
-            if (obj1 === obj2 ||
-                    isNaN(obj1) || isNaN(obj2) ||
-                    obj1 == null || obj2 == null ||
-                    type1 !== "object" || type2 !== "object") {
-
-                return identical(obj1, obj2);
-            }
-
-            // Elements are only equal if identical(expected, actual)
-            if (isElement(obj1) || isElement(obj2)) { return false; }
-
-            var isDate1 = isDate(obj1), isDate2 = isDate(obj2);
-            if (isDate1 || isDate2) {
-                if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) {
-                    return false;
-                }
-            }
-
-            if (obj1 instanceof RegExp && obj2 instanceof RegExp) {
-                if (obj1.toString() !== obj2.toString()) { return false; }
-            }
-
-            var class1 = getClass(obj1);
-            var class2 = getClass(obj2);
-            var keys1 = keys(obj1);
-            var keys2 = keys(obj2);
-
-            if (isArguments(obj1) || isArguments(obj2)) {
-                if (obj1.length !== obj2.length) { return false; }
-            } else {
-                if (type1 !== type2 || class1 !== class2 ||
-                        keys1.length !== keys2.length) {
-                    return false;
-                }
-            }
-
-            var key, i, l,
-                // following vars are used for the cyclic logic
-                value1, value2,
-                isObject1, isObject2,
-                index1, index2,
-                newPath1, newPath2;
-
-            for (i = 0, l = keys1.length; i < l; i++) {
-                key = keys1[i];
-                if (!o.hasOwnProperty.call(obj2, key)) {
-                    return false;
-                }
-
-                // Start of the cyclic logic
-
-                value1 = obj1[key];
-                value2 = obj2[key];
-
-                isObject1 = isObject(value1);
-                isObject2 = isObject(value2);
-
-                // determine, if the objects were already visited
-                // (it's faster to check for isObject first, than to
-                // get -1 from getIndex for non objects)
-                index1 = isObject1 ? getIndex(objects1, value1) : -1;
-                index2 = isObject2 ? getIndex(objects2, value2) : -1;
-
-                // determine the new pathes of the objects
-                // - for non cyclic objects the current path will be extended
-                //   by current property name
-                // - for cyclic objects the stored path is taken
-                newPath1 = index1 !== -1
-                    ? paths1[index1]
-                    : path1 + '[' + JSON.stringify(key) + ']';
-                newPath2 = index2 !== -1
-                    ? paths2[index2]
-                    : path2 + '[' + JSON.stringify(key) + ']';
-
-                // stop recursion if current objects are already compared
-                if (compared[newPath1 + newPath2]) {
-                    return true;
-                }
-
-                // remember the current objects and their pathes
-                if (index1 === -1 && isObject1) {
-                    objects1.push(value1);
-                    paths1.push(newPath1);
-                }
-                if (index2 === -1 && isObject2) {
-                    objects2.push(value2);
-                    paths2.push(newPath2);
-                }
-
-                // remember that the current objects are already compared
-                if (isObject1 && isObject2) {
-                    compared[newPath1 + newPath2] = true;
-                }
-
-                // End of cyclic logic
-
-                // neither value1 nor value2 is a cycle
-                // continue with next level
-                if (!deepEqual(value1, value2, newPath1, newPath2)) {
-                    return false;
-                }
-            }
-
-            return true;
-
-        }(obj1, obj2, '$1', '$2'));
-    }
-
-    var match;
-
-    function arrayContains(array, subset) {
-        if (subset.length === 0) { return true; }
-        var i, l, j, k;
-        for (i = 0, l = array.length; i < l; ++i) {
-            if (match(array[i], subset[0])) {
-                for (j = 0, k = subset.length; j < k; ++j) {
-                    if (!match(array[i + j], subset[j])) { return false; }
-                }
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * @name samsam.match
-     * @param Object object
-     * @param Object matcher
-     *
-     * Compare arbitrary value ``object`` with matcher.
-     */
-    match = function match(object, matcher) {
-        if (matcher && typeof matcher.test === "function") {
-            return matcher.test(object);
-        }
-
-        if (typeof matcher === "function") {
-            return matcher(object) === true;
-        }
-
-        if (typeof matcher === "string") {
-            matcher = matcher.toLowerCase();
-            var notNull = typeof object === "string" || !!object;
-            return notNull &&
-                (String(object)).toLowerCase().indexOf(matcher) >= 0;
-        }
-
-        if (typeof matcher === "number") {
-            return matcher === object;
-        }
-
-        if (typeof matcher === "boolean") {
-            return matcher === object;
-        }
-
-        if (typeof(matcher) === "undefined") {
-            return typeof(object) === "undefined";
-        }
-
-        if (matcher === null) {
-            return object === null;
-        }
-
-        if (getClass(object) === "Array" && getClass(matcher) === "Array") {
-            return arrayContains(object, matcher);
-        }
-
-        if (matcher && typeof matcher === "object") {
-            if (matcher === object) {
-                return true;
-            }
-            var prop;
-            for (prop in matcher) {
-                var value = object[prop];
-                if (typeof value === "undefined" &&
-                        typeof object.getAttribute === "function") {
-                    value = object.getAttribute(prop);
-                }
-                if (matcher[prop] === null || typeof matcher[prop] === 'undefined') {
-                    if (value !== matcher[prop]) {
-                        return false;
-                    }
-                } else if (typeof  value === "undefined" || !match(value, matcher[prop])) {
-                    return false;
-                }
-            }
-            return true;
-        }
-
-        throw new Error("Matcher was not a string, a number, a " +
-                        "function, a boolean or an object");
-    };
-
-    return {
-        isArguments: isArguments,
-        isElement: isElement,
-        isDate: isDate,
-        isNegZero: isNegZero,
-        identical: identical,
-        deepEqual: deepEqualCyclic,
-        match: match,
-        keys: keys
-    };
-});
-((typeof define === "function" && define.amd && function (m) {
-    define("formatio", ["samsam"], m);
-}) || (typeof module === "object" && function (m) {
-    module.exports = m(require("samsam"));
-}) || function (m) { this.formatio = m(this.samsam); }
-)(function (samsam) {
-    
-    var formatio = {
-        excludeConstructors: ["Object", /^.$/],
-        quoteStrings: true,
-        limitChildrenCount: 0
-    };
-
-    var hasOwn = Object.prototype.hasOwnProperty;
-
-    var specialObjects = [];
-    if (typeof global !== "undefined") {
-        specialObjects.push({ object: global, value: "[object global]" });
-    }
-    if (typeof document !== "undefined") {
-        specialObjects.push({
-            object: document,
-            value: "[object HTMLDocument]"
-        });
-    }
-    if (typeof window !== "undefined") {
-        specialObjects.push({ object: window, value: "[object Window]" });
-    }
-
-    function functionName(func) {
-        if (!func) { return ""; }
-        if (func.displayName) { return func.displayName; }
-        if (func.name) { return func.name; }
-        var matches = func.toString().match(/function\s+([^\(]+)/m);
-        return (matches && matches[1]) || "";
-    }
-
-    function constructorName(f, object) {
-        var name = functionName(object && object.constructor);
-        var excludes = f.excludeConstructors ||
-                formatio.excludeConstructors || [];
-
-        var i, l;
-        for (i = 0, l = excludes.length; i < l; ++i) {
-            if (typeof excludes[i] === "string" && excludes[i] === name) {
-                return "";
-            } else if (excludes[i].test && excludes[i].test(name)) {
-                return "";
-            }
-        }
-
-        return name;
-    }
-
-    function isCircular(object, objects) {
-        if (typeof object !== "object") { return false; }
-        var i, l;
-        for (i = 0, l = objects.length; i < l; ++i) {
-            if (objects[i] === object) { return true; }
-        }
-        return false;
-    }
-
-    function ascii(f, object, processed, indent) {
-        if (typeof object === "string") {
-            var qs = f.quoteStrings;
-            var quote = typeof qs !== "boolean" || qs;
-            return processed || quote ? '"' + object + '"' : object;
-        }
-
-        if (typeof object === "function" && !(object instanceof RegExp)) {
-            return ascii.func(object);
-        }
-
-        processed = processed || [];
-
-        if (isCircular(object, processed)) { return "[Circular]"; }
-
-        if (Object.prototype.toString.call(object) === "[object Array]") {
-            return ascii.array.call(f, object, processed);
-        }
-
-        if (!object) { return String((1/object) === -Infinity ? "-0" : object); }
-        if (samsam.isElement(object)) { return ascii.element(object); }
-
-        if (typeof object.toString === "function" &&
-                object.toString !== Object.prototype.toString) {
-            return object.toString();
-        }
-
-        var i, l;
-        for (i = 0, l = specialObjects.length; i < l; i++) {
-            if (object === specialObjects[i].object) {
-                return specialObjects[i].value;
-            }
-        }
-
-        return ascii.object.call(f, object, processed, indent);
-    }
-
-    ascii.func = function (func) {
-        return "function " + functionName(func) + "() {}";
-    };
-
-    ascii.array = function (array, processed) {
-        processed = processed || [];
-        processed.push(array);
-        var pieces = [];
-        var i, l;
-        l = (this.limitChildrenCount > 0) ? 
-            Math.min(this.limitChildrenCount, array.length) : array.length;
-
-        for (i = 0; i < l; ++i) {
-            pieces.push(ascii(this, array[i], processed));
-        }
-
-        if(l < array.length)
-            pieces.push("[... " + (array.length - l) + " more elements]");
-
-        return "[" + pieces.join(", ") + "]";
-    };
-
-    ascii.object = function (object, processed, indent) {
-        processed = processed || [];
-        processed.push(object);
-        indent = indent || 0;
-        var pieces = [], properties = samsam.keys(object).sort();
-        var length = 3;
-        var prop, str, obj, i, k, l;
-        l = (this.limitChildrenCount > 0) ? 
-            Math.min(this.limitChildrenCount, properties.length) : properties.length;
-
-        for (i = 0; i < l; ++i) {
-            prop = properties[i];
-            obj = object[prop];
-
-            if (isCircular(obj, processed)) {
-                str = "[Circular]";
-            } else {
-                str = ascii(this, obj, processed, indent + 2);
-            }
-
-            str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str;
-            length += str.length;
-            pieces.push(str);
-        }
-
-        var cons = constructorName(this, object);
-        var prefix = cons ? "[" + cons + "] " : "";
-        var is = "";
-        for (i = 0, k = indent; i < k; ++i) { is += " "; }
-
-        if(l < properties.length)
-            pieces.push("[... " + (properties.length - l) + " more elements]");
-
-        if (length + indent > 80) {
-            return prefix + "{\n  " + is + pieces.join(",\n  " + is) + "\n" +
-                is + "}";
-        }
-        return prefix + "{ " + pieces.join(", ") + " }";
-    };
-
-    ascii.element = function (element) {
-        var tagName = element.tagName.toLowerCase();
-        var attrs = element.attributes, attr, pairs = [], attrName, i, l, val;
-
-        for (i = 0, l = attrs.length; i < l; ++i) {
-            attr = attrs.item(i);
-            attrName = attr.nodeName.toLowerCase().replace("html:", "");
-            val = attr.nodeValue;
-            if (attrName !== "contenteditable" || val !== "inherit") {
-                if (!!val) { pairs.push(attrName + "=\"" + val + "\""); }
-            }
-        }
-
-        var formatted = "<" + tagName + (pairs.length > 0 ? " " : "");
-        var content = element.innerHTML;
-
-        if (content.length > 20) {
-            content = content.substr(0, 20) + "[...]";
-        }
-
-        var res = formatted + pairs.join(" ") + ">" + content +
-                "</" + tagName + ">";
-
-        return res.replace(/ contentEditable="inherit"/, "");
-    };
-
-    function Formatio(options) {
-        for (var opt in options) {
-            this[opt] = options[opt];
-        }
-    }
-
-    Formatio.prototype = {
-        functionName: functionName,
-
-        configure: function (options) {
-            return new Formatio(options);
-        },
-
-        constructorName: function (object) {
-            return constructorName(this, object);
-        },
-
-        ascii: function (object, processed, indent) {
-            return ascii(this, object, processed, indent);
-        }
-    };
-
-    return Formatio.prototype;
-});
-!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.lolex=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
-(function (global){
-/*jslint eqeqeq: false, plusplus: false, evil: true, onevar: false, browser: true, forin: false*/
-/*global global*/
-/**
- * @author Christian Johansen (christian@cjohansen.no) and contributors
- * @license BSD
- *
- * Copyright (c) 2010-2014 Christian Johansen
- */
-
-// node expects setTimeout/setInterval to return a fn object w/ .ref()/.unref()
-// browsers, a number.
-// see https://github.com/cjohansen/Sinon.JS/pull/436
-var timeoutResult = setTimeout(function() {}, 0);
-var addTimerReturnsObject = typeof timeoutResult === "object";
-clearTimeout(timeoutResult);
-
-var NativeDate = Date;
-var id = 1;
-
-/**
- * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into
- * number of milliseconds. This is used to support human-readable strings passed
- * to clock.tick()
- */
-function parseTime(str) {
-    if (!str) {
-        return 0;
-    }
-
-    var strings = str.split(":");
-    var l = strings.length, i = l;
-    var ms = 0, parsed;
-
-    if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) {
-        throw new Error("tick only understands numbers and 'h:m:s'");
-    }
-
-    while (i--) {
-        parsed = parseInt(strings[i], 10);
-
-        if (parsed >= 60) {
-            throw new Error("Invalid time " + str);
-        }
-
-        ms += parsed * Math.pow(60, (l - i - 1));
-    }
-
-    return ms * 1000;
-}
-
-/**
- * Used to grok the `now` parameter to createClock.
- */
-function getEpoch(epoch) {
-    if (!epoch) { return 0; }
-    if (typeof epoch.getTime === "function") { return epoch.getTime(); }
-    if (typeof epoch === "number") { return epoch; }
-    throw new TypeError("now should be milliseconds since UNIX epoch");
-}
-
-function inRange(from, to, timer) {
-    return timer && timer.callAt >= from && timer.callAt <= to;
-}
-
-function mirrorDateProperties(target, source) {
-    if (source.now) {
-        target.now = function now() {
-            return target.clock.now;
-        };
-    } else {
-        delete target.now;
-    }
-
-    if (source.toSource) {
-        target.toSource = function toSource() {
-            return source.toSource();
-        };
-    } else {
-        delete target.toSource;
-    }
-
-    target.toString = function toString() {
-        return source.toString();
-    };
-
-    target.prototype = source.prototype;
-    target.parse = source.parse;
-    target.UTC = source.UTC;
-    target.prototype.toUTCString = source.prototype.toUTCString;
-
-    for (var prop in source) {
-        if (source.hasOwnProperty(prop)) {
-            target[prop] = source[prop];
-        }
-    }
-
-    return target;
-}
-
-function createDate() {
-    function ClockDate(year, month, date, hour, minute, second, ms) {
-        // Defensive and verbose to avoid potential harm in passing
-        // explicit undefined when user does not pass argument
-        switch (arguments.length) {
-        case 0:
-            return new NativeDate(ClockDate.clock.now);
-        case 1:
-            return new NativeDate(year);
-        case 2:
-            return new NativeDate(year, month);
-        case 3:
-            return new NativeDate(year, month, date);
-        case 4:
-            return new NativeDate(year, month, date, hour);
-        case 5:
-            return new NativeDate(year, month, date, hour, minute);
-        case 6:
-            return new NativeDate(year, month, date, hour, minute, second);
-        default:
-            return new NativeDate(year, month, date, hour, minute, second, ms);
-        }
-    }
-
-    return mirrorDateProperties(ClockDate, NativeDate);
-}
-
-function addTimer(clock, timer) {
-    if (typeof timer.func === "undefined") {
-        throw new Error("Callback must be provided to timer calls");
-    }
-
-    if (!clock.timers) {
-        clock.timers = {};
-    }
-
-    timer.id = id++;
-    timer.createdAt = clock.now;
-    timer.callAt = clock.now + (timer.delay || 0);
-
-    clock.timers[timer.id] = timer;
-
-    if (addTimerReturnsObject) {
-        return {
-            id: timer.id,
-            ref: function() {},
-            unref: function() {}
-        };
-    }
-    else {
-        return timer.id;
-    }
-}
-
-function firstTimerInRange(clock, from, to) {
-    var timers = clock.timers, timer = null;
-
-    for (var id in timers) {
-        if (!inRange(from, to, timers[id])) {
-            continue;
-        }
-
-        if (!timer || ~compareTimers(timer, timers[id])) {
-            timer = timers[id];
-        }
-    }
-
-    return timer;
-}
-
-function compareTimers(a, b) {
-    // Sort first by absolute timing
-    if (a.callAt < b.callAt) {
-        return -1;
-    }
-    if (a.callAt > b.callAt) {
-        return 1;
-    }
-
-    // Sort next by immediate, immediate timers take precedence
-    if (a.immediate && !b.immediate) {
-        return -1;
-    }
-    if (!a.immediate && b.immediate) {
-        return 1;
-    }
-
-    // Sort next by creation time, earlier-created timers take precedence
-    if (a.createdAt < b.createdAt) {
-        return -1;
-    }
-    if (a.createdAt > b.createdAt) {
-        return 1;
-    }
-
-    // Sort next by id, lower-id timers take precedence
-    if (a.id < b.id) {
-        return -1;
-    }
-    if (a.id > b.id) {
-        return 1;
-    }
-
-    // As timer ids are unique, no fallback `0` is necessary
-}
-
-function callTimer(clock, timer) {
-    if (typeof timer.interval == "number") {
-        clock.timers[timer.id].callAt += timer.interval;
-    } else {
-        delete clock.timers[timer.id];
-    }
-
-    try {
-        if (typeof timer.func == "function") {
-            timer.func.apply(null, timer.args);
-        } else {
-            eval(timer.func);
-        }
-    } catch (e) {
-        var exception = e;
-    }
-
-    if (!clock.timers[timer.id]) {
-        if (exception) {
-            throw exception;
-        }
-        return;
-    }
-
-    if (exception) {
-        throw exception;
-    }
-}
-
-function uninstall(clock, target) {
-    var method;
-
-    for (var i = 0, l = clock.methods.length; i < l; i++) {
-        method = clock.methods[i];
-
-        if (target[method].hadOwnProperty) {
-            target[method] = clock["_" + method];
-        } else {
-            try {
-                delete target[method];
-            } catch (e) {}
-        }
-    }
-
-    // Prevent multiple executions which will completely remove these props
-    clock.methods = [];
-}
-
-function hijackMethod(target, method, clock) {
-    clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method);
-    clock["_" + method] = target[method];
-
-    if (method == "Date") {
-        var date = mirrorDateProperties(clock[method], target[method]);
-        target[method] = date;
-    } else {
-        target[method] = function () {
-            return clock[method].apply(clock, arguments);
-        };
-
-        for (var prop in clock[method]) {
-            if (clock[method].hasOwnProperty(prop)) {
-                target[method][prop] = clock[method][prop];
-            }
-        }
-    }
-
-    target[method].clock = clock;
-}
-
-var timers = {
-    setTimeout: setTimeout,
-    clearTimeout: clearTimeout,
-    setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined),
-    clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate: undefined),
-    setInterval: setInterval,
-    clearInterval: clearInterval,
-    Date: Date
-};
-
-var keys = Object.keys || function (obj) {
-    var ks = [];
-    for (var key in obj) {
-        ks.push(key);
-    }
-    return ks;
-};
-
-exports.timers = timers;
-
-var createClock = exports.createClock = function (now) {
-    var clock = {
-        now: getEpoch(now),
-        timeouts: {},
-        Date: createDate()
-    };
-
-    clock.Date.clock = clock;
-
-    clock.setTimeout = function setTimeout(func, timeout) {
-        return addTimer(clock, {
-            func: func,
-            args: Array.prototype.slice.call(arguments, 2),
-            delay: timeout
-        });
-    };
-
-    clock.clearTimeout = function clearTimeout(timerId) {
-        if (!timerId) {
-            // null appears to be allowed in most browsers, and appears to be
-            // relied upon by some libraries, like Bootstrap carousel
-            return;
-        }
-        if (!clock.timers) {
-            clock.timers = [];
-        }
-        // in Node, timerId is an object with .ref()/.unref(), and
-        // its .id field is the actual timer id.
-        if (typeof timerId === "object") {
-            timerId = timerId.id
-        }
-        if (timerId in clock.timers) {
-            delete clock.timers[timerId];
-        }
-    };
-
-    clock.setInterval = function setInterval(func, timeout) {
-        return addTimer(clock, {
-            func: func,
-            args: Array.prototype.slice.call(arguments, 2),
-            delay: timeout,
-            interval: timeout
-        });
-    };
-
-    clock.clearInterval = function clearInterval(timerId) {
-        clock.clearTimeout(timerId);
-    };
-
-    clock.setImmediate = function setImmediate(func) {
-        return addTimer(clock, {
-            func: func,
-            args: Array.prototype.slice.call(arguments, 1),
-            immediate: true
-        });
-    };
-
-    clock.clearImmediate = function clearImmediate(timerId) {
-        clock.clearTimeout(timerId);
-    };
-
-    clock.tick = function tick(ms) {
-        ms = typeof ms == "number" ? ms : parseTime(ms);
-        var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now;
-        var timer = firstTimerInRange(clock, tickFrom, tickTo);
-
-        var firstException;
-        while (timer && tickFrom <= tickTo) {
-            if (clock.timers[timer.id]) {
-                tickFrom = clock.now = timer.callAt;
-                try {
-                    callTimer(clock, timer);
-                } catch (e) {
-                    firstException = firstException || e;
-                }
-            }
-
-            timer = firstTimerInRange(clock, previous, tickTo);
-            previous = tickFrom;
-        }
-
-        clock.now = tickTo;
-
-        if (firstException) {
-            throw firstException;
-        }
-
-        return clock.now;
-    };
-
-    clock.reset = function reset() {
-        clock.timers = {};
-    };
-
-    return clock;
-};
-
-exports.install = function install(target, now, toFake) {
-    if (typeof target === "number") {
-        toFake = now;
-        now = target;
-        target = null;
-    }
-
-    if (!target) {
-        target = global;
-    }
-
-    var clock = createClock(now);
-
-    clock.uninstall = function () {
-        uninstall(clock, target);
-    };
-
-    clock.methods = toFake || [];
-
-    if (clock.methods.length === 0) {
-        clock.methods = keys(timers);
-    }
-
-    for (var i = 0, l = clock.methods.length; i < l; i++) {
-        hijackMethod(target, clock.methods[i], clock);
-    }
-
-    return clock;
-};
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}]},{},[1])(1)
-});
-  })();
-  var define;
-/**
- * Sinon core utilities. For internal use only.
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-var sinon = (function () {
-"use strict";
-
-    var sinon;
-    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports, module) {
-        sinon = module.exports = require("./sinon/util/core");
-        require("./sinon/extend");
-        require("./sinon/typeOf");
-        require("./sinon/times_in_words");
-        require("./sinon/spy");
-        require("./sinon/call");
-        require("./sinon/behavior");
-        require("./sinon/stub");
-        require("./sinon/mock");
-        require("./sinon/collection");
-        require("./sinon/assert");
-        require("./sinon/sandbox");
-        require("./sinon/test");
-        require("./sinon/test_case");
-        require("./sinon/match");
-        require("./sinon/format");
-        require("./sinon/log_error");
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-        sinon = module.exports;
-    } else {
-        sinon = {};
-    }
-
-    return sinon;
-}());
-
-/**
- * @depend ../../sinon.js
- */
-/**
- * Sinon core utilities. For internal use only.
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon) {
-    var div = typeof document != "undefined" && document.createElement("div");
-    var hasOwn = Object.prototype.hasOwnProperty;
-
-    function isDOMNode(obj) {
-        var success = false;
-
-        try {
-            obj.appendChild(div);
-            success = div.parentNode == obj;
-        } catch (e) {
-            return false;
-        } finally {
-            try {
-                obj.removeChild(div);
-            } catch (e) {
-                // Remove failed, not much we can do about that
-            }
-        }
-
-        return success;
-    }
-
-    function isElement(obj) {
-        return div && obj && obj.nodeType === 1 && isDOMNode(obj);
-    }
-
-    function isFunction(obj) {
-        return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply);
-    }
-
-    function isReallyNaN(val) {
-        return typeof val === "number" && isNaN(val);
-    }
-
-    function mirrorProperties(target, source) {
-        for (var prop in source) {
-            if (!hasOwn.call(target, prop)) {
-                target[prop] = source[prop];
-            }
-        }
-    }
-
-    function isRestorable(obj) {
-        return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon;
-    }
-
-    function makeApi(sinon) {
-        sinon.wrapMethod = function wrapMethod(object, property, method) {
-            if (!object) {
-                throw new TypeError("Should wrap property of object");
-            }
-
-            if (typeof method != "function") {
-                throw new TypeError("Method wrapper should be function");
-            }
-
-            var wrappedMethod = object[property],
-                error;
-
-            if (!isFunction(wrappedMethod)) {
-                error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " +
-                                    property + " as function");
-            } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) {
-                error = new TypeError("Attempted to wrap " + property + " which is already wrapped");
-            } else if (wrappedMethod.calledBefore) {
-                var verb = !!wrappedMethod.returns ? "stubbed" : "spied on";
-                error = new TypeError("Attempted to wrap " + property + " which is already " + verb);
-            }
-
-            if (error) {
-                if (wrappedMethod && wrappedMethod.stackTrace) {
-                    error.stack += "\n--------------\n" + wrappedMethod.stackTrace;
-                }
-                throw error;
-            }
-
-            // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem
-            // when using hasOwn.call on objects from other frames.
-            var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property);
-            object[property] = method;
-            method.displayName = property;
-            // Set up a stack trace which can be used later to find what line of
-            // code the original method was created on.
-            method.stackTrace = (new Error("Stack Trace for original")).stack;
-
-            method.restore = function () {
-                // For prototype properties try to reset by delete first.
-                // If this fails (ex: localStorage on mobile safari) then force a reset
-                // via direct assignment.
-                if (!owned) {
-                    delete object[property];
-                }
-                if (object[property] === method) {
-                    object[property] = wrappedMethod;
-                }
-            };
-
-            method.restore.sinon = true;
-            mirrorProperties(method, wrappedMethod);
-
-            return method;
-        };
-
-        sinon.create = function create(proto) {
-            var F = function () {};
-            F.prototype = proto;
-            return new F();
-        };
-
-        sinon.deepEqual = function deepEqual(a, b) {
-            if (sinon.match && sinon.match.isMatcher(a)) {
-                return a.test(b);
-            }
-
-            if (typeof a != "object" || typeof b != "object") {
-                if (isReallyNaN(a) && isReallyNaN(b)) {
-                    return true;
-                } else {
-                    return a === b;
-                }
-            }
-
-            if (isElement(a) || isElement(b)) {
-                return a === b;
-            }
-
-            if (a === b) {
-                return true;
-            }
-
-            if ((a === null && b !== null) || (a !== null && b === null)) {
-                return false;
-            }
-
-            if (a instanceof RegExp && b instanceof RegExp) {
-                return (a.source === b.source) && (a.global === b.global) &&
-                    (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline);
-            }
-
-            var aString = Object.prototype.toString.call(a);
-            if (aString != Object.prototype.toString.call(b)) {
-                return false;
-            }
-
-            if (aString == "[object Date]") {
-                return a.valueOf() === b.valueOf();
-            }
-
-            var prop, aLength = 0, bLength = 0;
-
-            if (aString == "[object Array]" && a.length !== b.length) {
-                return false;
-            }
-
-            for (prop in a) {
-                aLength += 1;
-
-                if (!(prop in b)) {
-                    return false;
-                }
-
-                if (!deepEqual(a[prop], b[prop])) {
-                    return false;
-                }
-            }
-
-            for (prop in b) {
-                bLength += 1;
-            }
-
-            return aLength == bLength;
-        };
-
-        sinon.functionName = function functionName(func) {
-            var name = func.displayName || func.name;
-
-            // Use function decomposition as a last resort to get function
-            // name. Does not rely on function decomposition to work - if it
-            // doesn't debugging will be slightly less informative
-            // (i.e. toString will say 'spy' rather than 'myFunc').
-            if (!name) {
-                var matches = func.toString().match(/function ([^\s\(]+)/);
-                name = matches && matches[1];
-            }
-
-            return name;
-        };
-
-        sinon.functionToString = function toString() {
-            if (this.getCall && this.callCount) {
-                var thisValue, prop, i = this.callCount;
-
-                while (i--) {
-                    thisValue = this.getCall(i).thisValue;
-
-                    for (prop in thisValue) {
-                        if (thisValue[prop] === this) {
-                            return prop;
-                        }
-                    }
-                }
-            }
-
-            return this.displayName || "sinon fake";
-        };
-
-        sinon.getConfig = function (custom) {
-            var config = {};
-            custom = custom || {};
-            var defaults = sinon.defaultConfig;
-
-            for (var prop in defaults) {
-                if (defaults.hasOwnProperty(prop)) {
-                    config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop];
-                }
-            }
-
-            return config;
-        };
-
-        sinon.defaultConfig = {
-            injectIntoThis: true,
-            injectInto: null,
-            properties: ["spy", "stub", "mock", "clock", "server", "requests"],
-            useFakeTimers: true,
-            useFakeServer: true
-        };
-
-        sinon.timesInWords = function timesInWords(count) {
-            return count == 1 && "once" ||
-                count == 2 && "twice" ||
-                count == 3 && "thrice" ||
-                (count || 0) + " times";
-        };
-
-        sinon.calledInOrder = function (spies) {
-            for (var i = 1, l = spies.length; i < l; i++) {
-                if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) {
-                    return false;
-                }
-            }
-
-            return true;
-        };
-
-        sinon.orderByFirstCall = function (spies) {
-            return spies.sort(function (a, b) {
-                // uuid, won't ever be equal
-                var aCall = a.getCall(0);
-                var bCall = b.getCall(0);
-                var aId = aCall && aCall.callId || -1;
-                var bId = bCall && bCall.callId || -1;
-
-                return aId < bId ? -1 : 1;
-            });
-        };
-
-        sinon.createStubInstance = function (constructor) {
-            if (typeof constructor !== "function") {
-                throw new TypeError("The constructor should be a function.");
-            }
-            return sinon.stub(sinon.create(constructor.prototype));
-        };
-
-        sinon.restore = function (object) {
-            if (object !== null && typeof object === "object") {
-                for (var prop in object) {
-                    if (isRestorable(object[prop])) {
-                        object[prop].restore();
-                    }
-                }
-            } else if (isRestorable(object)) {
-                object.restore();
-            }
-        };
-
-        return sinon;
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports) {
-        makeApi(exports);
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend util/core.js
- */
-
-(function (sinon) {
-    function makeApi(sinon) {
-
-        // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug
-        var hasDontEnumBug = (function () {
-            var obj = {
-                constructor: function () {
-                    return "0";
-                },
-                toString: function () {
-                    return "1";
-                },
-                valueOf: function () {
-                    return "2";
-                },
-                toLocaleString: function () {
-                    return "3";
-                },
-                prototype: function () {
-                    return "4";
-                },
-                isPrototypeOf: function () {
-                    return "5";
-                },
-                propertyIsEnumerable: function () {
-                    return "6";
-                },
-                hasOwnProperty: function () {
-                    return "7";
-                },
-                length: function () {
-                    return "8";
-                },
-                unique: function () {
-                    return "9"
-                }
-            };
-
-            var result = [];
-            for (var prop in obj) {
-                result.push(obj[prop]());
-            }
-            return result.join("") !== "0123456789";
-        })();
-
-        /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will
-         *         override properties in previous sources.
-         *
-         * target - The Object to extend
-         * sources - Objects to copy properties from.
-         *
-         * Returns the extended target
-         */
-        function extend(target /*, sources */) {
-            var sources = Array.prototype.slice.call(arguments, 1),
-                source, i, prop;
-
-            for (i = 0; i < sources.length; i++) {
-                source = sources[i];
-
-                for (prop in source) {
-                    if (source.hasOwnProperty(prop)) {
-                        target[prop] = source[prop];
-                    }
-                }
-
-                // Make sure we copy (own) toString method even when in JScript with DontEnum bug
-                // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug
-                if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) {
-                    target.toString = source.toString;
-                }
-            }
-
-            return target;
-        };
-
-        sinon.extend = extend;
-        return sinon.extend;
-    }
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        module.exports = makeApi(sinon);
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend util/core.js
- */
-
-(function (sinon) {
-    function makeApi(sinon) {
-
-        function timesInWords(count) {
-            switch (count) {
-                case 1:
-                    return "once";
-                case 2:
-                    return "twice";
-                case 3:
-                    return "thrice";
-                default:
-                    return (count || 0) + " times";
-            }
-        }
-
-        sinon.timesInWords = timesInWords;
-        return sinon.timesInWords;
-    }
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        module.exports = makeApi(sinon);
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend util/core.js
- */
-/**
- * Format functions
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2014 Christian Johansen
- */
-
-(function (sinon, formatio) {
-    function makeApi(sinon) {
-        function typeOf(value) {
-            if (value === null) {
-                return "null";
-            } else if (value === undefined) {
-                return "undefined";
-            }
-            var string = Object.prototype.toString.call(value);
-            return string.substring(8, string.length - 1).toLowerCase();
-        };
-
-        sinon.typeOf = typeOf;
-        return sinon.typeOf;
-    }
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        module.exports = makeApi(sinon);
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(
-    (typeof sinon == "object" && sinon || null),
-    (typeof formatio == "object" && formatio)
-));
-
-/**
- * @depend util/core.js
- * @depend typeOf.js
- */
-/*jslint eqeqeq: false, onevar: false, plusplus: false*/
-/*global module, require, sinon*/
-/**
- * Match functions
- *
- * @author Maximilian Antoni (mail@maxantoni.de)
- * @license BSD
- *
- * Copyright (c) 2012 Maximilian Antoni
- */
-
-(function (sinon) {
-    function makeApi(sinon) {
-        function assertType(value, type, name) {
-            var actual = sinon.typeOf(value);
-            if (actual !== type) {
-                throw new TypeError("Expected type of " + name + " to be " +
-                    type + ", but was " + actual);
-            }
-        }
-
-        var matcher = {
-            toString: function () {
-                return this.message;
-            }
-        };
-
-        function isMatcher(object) {
-            return matcher.isPrototypeOf(object);
-        }
-
-        function matchObject(expectation, actual) {
-            if (actual === null || actual === undefined) {
-                return false;
-            }
-            for (var key in expectation) {
-                if (expectation.hasOwnProperty(key)) {
-                    var exp = expectation[key];
-                    var act = actual[key];
-                    if (match.isMatcher(exp)) {
-                        if (!exp.test(act)) {
-                            return false;
-                        }
-                    } else if (sinon.typeOf(exp) === "object") {
-                        if (!matchObject(exp, act)) {
-                            return false;
-                        }
-                    } else if (!sinon.deepEqual(exp, act)) {
-                        return false;
-                    }
-                }
-            }
-            return true;
-        }
-
-        matcher.or = function (m2) {
-            if (!arguments.length) {
-                throw new TypeError("Matcher expected");
-            } else if (!isMatcher(m2)) {
-                m2 = match(m2);
-            }
-            var m1 = this;
-            var or = sinon.create(matcher);
-            or.test = function (actual) {
-                return m1.test(actual) || m2.test(actual);
-            };
-            or.message = m1.message + ".or(" + m2.message + ")";
-            return or;
-        };
-
-        matcher.and = function (m2) {
-            if (!arguments.length) {
-                throw new TypeError("Matcher expected");
-            } else if (!isMatcher(m2)) {
-                m2 = match(m2);
-            }
-            var m1 = this;
-            var and = sinon.create(matcher);
-            and.test = function (actual) {
-                return m1.test(actual) && m2.test(actual);
-            };
-            and.message = m1.message + ".and(" + m2.message + ")";
-            return and;
-        };
-
-        var match = function (expectation, message) {
-            var m = sinon.create(matcher);
-            var type = sinon.typeOf(expectation);
-            switch (type) {
-            case "object":
-                if (typeof expectation.test === "function") {
-                    m.test = function (actual) {
-                        return expectation.test(actual) === true;
-                    };
-                    m.message = "match(" + sinon.functionName(expectation.test) + ")";
-                    return m;
-                }
-                var str = [];
-                for (var key in expectation) {
-                    if (expectation.hasOwnProperty(key)) {
-                        str.push(key + ": " + expectation[key]);
-                    }
-                }
-                m.test = function (actual) {
-                    return matchObject(expectation, actual);
-                };
-                m.message = "match(" + str.join(", ") + ")";
-                break;
-            case "number":
-                m.test = function (actual) {
-                    return expectation == actual;
-                };
-                break;
-            case "string":
-                m.test = function (actual) {
-                    if (typeof actual !== "string") {
-                        return false;
-                    }
-                    return actual.indexOf(expectation) !== -1;
-                };
-                m.message = "match(\"" + expectation + "\")";
-                break;
-            case "regexp":
-                m.test = function (actual) {
-                    if (typeof actual !== "string") {
-                        return false;
-                    }
-                    return expectation.test(actual);
-                };
-                break;
-            case "function":
-                m.test = expectation;
-                if (message) {
-                    m.message = message;
-                } else {
-                    m.message = "match(" + sinon.functionName(expectation) + ")";
-                }
-                break;
-            default:
-                m.test = function (actual) {
-                    return sinon.deepEqual(expectation, actual);
-                };
-            }
-            if (!m.message) {
-                m.message = "match(" + expectation + ")";
-            }
-            return m;
-        };
-
-        match.isMatcher = isMatcher;
-
-        match.any = match(function () {
-            return true;
-        }, "any");
-
-        match.defined = match(function (actual) {
-            return actual !== null && actual !== undefined;
-        }, "defined");
-
-        match.truthy = match(function (actual) {
-            return !!actual;
-        }, "truthy");
-
-        match.falsy = match(function (actual) {
-            return !actual;
-        }, "falsy");
-
-        match.same = function (expectation) {
-            return match(function (actual) {
-                return expectation === actual;
-            }, "same(" + expectation + ")");
-        };
-
-        match.typeOf = function (type) {
-            assertType(type, "string", "type");
-            return match(function (actual) {
-                return sinon.typeOf(actual) === type;
-            }, "typeOf(\"" + type + "\")");
-        };
-
-        match.instanceOf = function (type) {
-            assertType(type, "function", "type");
-            return match(function (actual) {
-                return actual instanceof type;
-            }, "instanceOf(" + sinon.functionName(type) + ")");
-        };
-
-        function createPropertyMatcher(propertyTest, messagePrefix) {
-            return function (property, value) {
-                assertType(property, "string", "property");
-                var onlyProperty = arguments.length === 1;
-                var message = messagePrefix + "(\"" + property + "\"";
-                if (!onlyProperty) {
-                    message += ", " + value;
-                }
-                message += ")";
-                return match(function (actual) {
-                    if (actual === undefined || actual === null ||
-                            !propertyTest(actual, property)) {
-                        return false;
-                    }
-                    return onlyProperty || sinon.deepEqual(value, actual[property]);
-                }, message);
-            };
-        }
-
-        match.has = createPropertyMatcher(function (actual, property) {
-            if (typeof actual === "object") {
-                return property in actual;
-            }
-            return actual[property] !== undefined;
-        }, "has");
-
-        match.hasOwn = createPropertyMatcher(function (actual, property) {
-            return actual.hasOwnProperty(property);
-        }, "hasOwn");
-
-        match.bool = match.typeOf("boolean");
-        match.number = match.typeOf("number");
-        match.string = match.typeOf("string");
-        match.object = match.typeOf("object");
-        match.func = match.typeOf("function");
-        match.array = match.typeOf("array");
-        match.regexp = match.typeOf("regexp");
-        match.date = match.typeOf("date");
-
-        sinon.match = match;
-        return match;
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        require("./typeOf");
-        module.exports = makeApi(sinon);
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend util/core.js
- */
-/**
- * Format functions
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2014 Christian Johansen
- */
-
-(function (sinon, formatio) {
-    function makeApi(sinon) {
-        function valueFormatter(value) {
-            return "" + value;
-        }
-
-        function getFormatioFormatter() {
-            var formatter = formatio.configure({
-                    quoteStrings: false,
-                    limitChildrenCount: 250
-                });
-
-            function format() {
-                return formatter.ascii.apply(formatter, arguments);
-            };
-
-            return format;
-        }
-
-        function getNodeFormatter(value) {
-            function format(value) {
-                return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value;
-            };
-
-            try {
-                var util = require("util");
-            } catch (e) {
-                /* Node, but no util module - would be very old, but better safe than sorry */
-            }
-
-            return util ? format : valueFormatter;
-        }
-
-        var isNode = typeof module !== "undefined" && module.exports && typeof require == "function",
-            formatter;
-
-        if (isNode) {
-            try {
-                formatio = require("formatio");
-            } catch (e) {}
-        }
-
-        if (formatio) {
-            formatter = getFormatioFormatter()
-        } else if (isNode) {
-            formatter = getNodeFormatter();
-        } else {
-            formatter = valueFormatter;
-        }
-
-        sinon.format = formatter;
-        return sinon.format;
-    }
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        module.exports = makeApi(sinon);
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(
-    (typeof sinon == "object" && sinon || null),
-    (typeof formatio == "object" && formatio)
-));
-
-/**
-  * @depend util/core.js
-  * @depend match.js
-  * @depend format.js
-  */
-/**
-  * Spy calls
-  *
-  * @author Christian Johansen (christian@cjohansen.no)
-  * @author Maximilian Antoni (mail@maxantoni.de)
-  * @license BSD
-  *
-  * Copyright (c) 2010-2013 Christian Johansen
-  * Copyright (c) 2013 Maximilian Antoni
-  */
-
-(function (sinon) {
-    function makeApi(sinon) {
-        function throwYieldError(proxy, text, args) {
-            var msg = sinon.functionName(proxy) + text;
-            if (args.length) {
-                msg += " Received [" + slice.call(args).join(", ") + "]";
-            }
-            throw new Error(msg);
-        }
-
-        var slice = Array.prototype.slice;
-
-        var callProto = {
-            calledOn: function calledOn(thisValue) {
-                if (sinon.match && sinon.match.isMatcher(thisValue)) {
-                    return thisValue.test(this.thisValue);
-                }
-                return this.thisValue === thisValue;
-            },
-
-            calledWith: function calledWith() {
-                var l = arguments.length;
-                if (l > this.args.length) {
-                    return false;
-                }
-                for (var i = 0; i < l; i += 1) {
-                    if (!sinon.deepEqual(arguments[i], this.args[i])) {
-                        return false;
-                    }
-                }
-
-                return true;
-            },
-
-            calledWithMatch: function calledWithMatch() {
-                var l = arguments.length;
-                if (l > this.args.length) {
-                    return false;
-                }
-                for (var i = 0; i < l; i += 1) {
-                    var actual = this.args[i];
-                    var expectation = arguments[i];
-                    if (!sinon.match || !sinon.match(expectation).test(actual)) {
-                        return false;
-                    }
-                }
-                return true;
-            },
-
-            calledWithExactly: function calledWithExactly() {
-                return arguments.length == this.args.length &&
-                    this.calledWith.apply(this, arguments);
-            },
-
-            notCalledWith: function notCalledWith() {
-                return !this.calledWith.apply(this, arguments);
-            },
-
-            notCalledWithMatch: function notCalledWithMatch() {
-                return !this.calledWithMatch.apply(this, arguments);
-            },
-
-            returned: function returned(value) {
-                return sinon.deepEqual(value, this.returnValue);
-            },
-
-            threw: function threw(error) {
-                if (typeof error === "undefined" || !this.exception) {
-                    return !!this.exception;
-                }
-
-                return this.exception === error || this.exception.name === error;
-            },
-
-            calledWithNew: function calledWithNew() {
-                return this.proxy.prototype && this.thisValue instanceof this.proxy;
-            },
-
-            calledBefore: function (other) {
-                return this.callId < other.callId;
-            },
-
-            calledAfter: function (other) {
-                return this.callId > other.callId;
-            },
-
-            callArg: function (pos) {
-                this.args[pos]();
-            },
-
-            callArgOn: function (pos, thisValue) {
-                this.args[pos].apply(thisValue);
-            },
-
-            callArgWith: function (pos) {
-                this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1)));
-            },
-
-            callArgOnWith: function (pos, thisValue) {
-                var args = slice.call(arguments, 2);
-                this.args[pos].apply(thisValue, args);
-            },
-
-            yield: function () {
-                this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0)));
-            },
-
-            yieldOn: function (thisValue) {
-                var args = this.args;
-                for (var i = 0, l = args.length; i < l; ++i) {
-                    if (typeof args[i] === "function") {
-                        args[i].apply(thisValue, slice.call(arguments, 1));
-                        return;
-                    }
-                }
-                throwYieldError(this.proxy, " cannot yield since no callback was passed.", args);
-            },
-
-            yieldTo: function (prop) {
-                this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1)));
-            },
-
-            yieldToOn: function (prop, thisValue) {
-                var args = this.args;
-                for (var i = 0, l = args.length; i < l; ++i) {
-                    if (args[i] && typeof args[i][prop] === "function") {
-                        args[i][prop].apply(thisValue, slice.call(arguments, 2));
-                        return;
-                    }
-                }
-                throwYieldError(this.proxy, " cannot yield to '" + prop +
-                    "' since no callback was passed.", args);
-            },
-
-            toString: function () {
-                var callStr = this.proxy.toString() + "(";
-                var args = [];
-
-                for (var i = 0, l = this.args.length; i < l; ++i) {
-                    args.push(sinon.format(this.args[i]));
-                }
-
-                callStr = callStr + args.join(", ") + ")";
-
-                if (typeof this.returnValue != "undefined") {
-                    callStr += " => " + sinon.format(this.returnValue);
-                }
-
-                if (this.exception) {
-                    callStr += " !" + this.exception.name;
-
-                    if (this.exception.message) {
-                        callStr += "(" + this.exception.message + ")";
-                    }
-                }
-
-                return callStr;
-            }
-        };
-
-        callProto.invokeCallback = callProto.yield;
-
-        function createSpyCall(spy, thisValue, args, returnValue, exception, id) {
-            if (typeof id !== "number") {
-                throw new TypeError("Call id is not a number");
-            }
-            var proxyCall = sinon.create(callProto);
-            proxyCall.proxy = spy;
-            proxyCall.thisValue = thisValue;
-            proxyCall.args = args;
-            proxyCall.returnValue = returnValue;
-            proxyCall.exception = exception;
-            proxyCall.callId = id;
-
-            return proxyCall;
-        }
-        createSpyCall.toString = callProto.toString; // used by mocks
-
-        sinon.spyCall = createSpyCall;
-        return createSpyCall;
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        require("./match");
-        require("./format");
-        module.exports = makeApi(sinon);
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
-  * @depend times_in_words.js
-  * @depend util/core.js
-  * @depend extend.js
-  * @depend call.js
-  * @depend format.js
-  */
-/**
-  * Spy functions
-  *
-  * @author Christian Johansen (christian@cjohansen.no)
-  * @license BSD
-  *
-  * Copyright (c) 2010-2013 Christian Johansen
-  */
-
-(function (sinon) {
-    function makeApi(sinon) {
-        var push = Array.prototype.push;
-        var slice = Array.prototype.slice;
-        var callId = 0;
-
-        function spy(object, property) {
-            if (!property && typeof object == "function") {
-                return spy.create(object);
-            }
-
-            if (!object && !property) {
-                return spy.create(function () { });
-            }
-
-            var method = object[property];
-            return sinon.wrapMethod(object, property, spy.create(method));
-        }
-
-        function matchingFake(fakes, args, strict) {
-            if (!fakes) {
-                return;
-            }
-
-            for (var i = 0, l = fakes.length; i < l; i++) {
-                if (fakes[i].matches(args, strict)) {
-                    return fakes[i];
-                }
-            }
-        }
-
-        function incrementCallCount() {
-            this.called = true;
-            this.callCount += 1;
-            this.notCalled = false;
-            this.calledOnce = this.callCount == 1;
-            this.calledTwice = this.callCount == 2;
-            this.calledThrice = this.callCount == 3;
-        }
-
-        function createCallProperties() {
-            this.firstCall = this.getCall(0);
-            this.secondCall = this.getCall(1);
-            this.thirdCall = this.getCall(2);
-            this.lastCall = this.getCall(this.callCount - 1);
-        }
-
-        var vars = "a,b,c,d,e,f,g,h,i,j,k,l";
-        function createProxy(func, proxyLength) {
-            // Retain the function length:
-            var p;
-            if (proxyLength) {
-                eval("p = (function proxy(" + vars.substring(0, proxyLength * 2 - 1) +
-                    ") { return p.invoke(func, this, slice.call(arguments)); });");
-            } else {
-                p = function proxy() {
-                    return p.invoke(func, this, slice.call(arguments));
-                };
-            }
-            return p;
-        }
-
-        var uuid = 0;
-
-        // Public API
-        var spyApi = {
-            reset: function () {
-                if (this.invoking) {
-                    var err = new Error("Cannot reset Sinon function while invoking it. " +
-                                        "Move the call to .reset outside of the callback.");
-                    err.name = "InvalidResetException";
-                    throw err;
-                }
-
-                this.called = false;
-                this.notCalled = true;
-                this.calledOnce = false;
-                this.calledTwice = false;
-                this.calledThrice = false;
-                this.callCount = 0;
-                this.firstCall = null;
-                this.secondCall = null;
-                this.thirdCall = null;
-                this.lastCall = null;
-                this.args = [];
-                this.returnValues = [];
-                this.thisValues = [];
-                this.exceptions = [];
-                this.callIds = [];
-                if (this.fakes) {
-                    for (var i = 0; i < this.fakes.length; i++) {
-                        this.fakes[i].reset();
-                    }
-                }
-
-                return this;
-            },
-
-            create: function create(func, spyLength) {
-                var name;
-
-                if (typeof func != "function") {
-                    func = function () { };
-                } else {
-                    name = sinon.functionName(func);
-                }
-
-                if (!spyLength) {
-                    spyLength = func.length;
-                }
-
-                var proxy = createProxy(func, spyLength);
-
-                sinon.extend(proxy, spy);
-                delete proxy.create;
-                sinon.extend(proxy, func);
-
-                proxy.reset();
-                proxy.prototype = func.prototype;
-                proxy.displayName = name || "spy";
-                proxy.toString = sinon.functionToString;
-                proxy.instantiateFake = sinon.spy.create;
-                proxy.id = "spy#" + uuid++;
-
-                return proxy;
-            },
-
-            invoke: function invoke(func, thisValue, args) {
-                var matching = matchingFake(this.fakes, args);
-                var exception, returnValue;
-
-                incrementCallCount.call(this);
-                push.call(this.thisValues, thisValue);
-                push.call(this.args, args);
-                push.call(this.callIds, callId++);
-
-                // Make call properties available from within the spied function:
-                createCallProperties.call(this);
-
-                try {
-                    this.invoking = true;
-
-                    if (matching) {
-                        returnValue = matching.invoke(func, thisValue, args);
-                    } else {
-                        returnValue = (this.func || func).apply(thisValue, args);
-                    }
-
-                    var thisCall = this.getCall(this.callCount - 1);
-                    if (thisCall.calledWithNew() && typeof returnValue !== "object") {
-                        returnValue = thisValue;
-                    }
-                } catch (e) {
-                    exception = e;
-                } finally {
-                    delete this.invoking;
-                }
-
-                push.call(this.exceptions, exception);
-                push.call(this.returnValues, returnValue);
-
-                // Make return value and exception available in the calls:
-                createCallProperties.call(this);
-
-                if (exception !== undefined) {
-                    throw exception;
-                }
-
-                return returnValue;
-            },
-
-            named: function named(name) {
-                this.displayName = name;
-                return this;
-            },
-
-            getCall: function getCall(i) {
-                if (i < 0 || i >= this.callCount) {
-                    return null;
-                }
-
-                return sinon.spyCall(this, this.thisValues[i], this.args[i],
-                                        this.returnValues[i], this.exceptions[i],
-                                        this.callIds[i]);
-            },
-
-            getCalls: function () {
-                var calls = [];
-                var i;
-
-                for (i = 0; i < this.callCount; i++) {
-                    calls.push(this.getCall(i));
-                }
-
-                return calls;
-            },
-
-            calledBefore: function calledBefore(spyFn) {
-                if (!this.called) {
-                    return false;
-                }
-
-                if (!spyFn.called) {
-                    return true;
-                }
-
-                return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1];
-            },
-
-            calledAfter: function calledAfter(spyFn) {
-                if (!this.called || !spyFn.called) {
-                    return false;
-                }
-
-                return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1];
-            },
-
-            withArgs: function () {
-                var args = slice.call(arguments);
-
-                if (this.fakes) {
-                    var match = matchingFake(this.fakes, args, true);
-
-                    if (match) {
-                        return match;
-                    }
-                } else {
-                    this.fakes = [];
-                }
-
-                var original = this;
-                var fake = this.instantiateFake();
-                fake.matchingAguments = args;
-                fake.parent = this;
-                push.call(this.fakes, fake);
-
-                fake.withArgs = function () {
-                    return original.withArgs.apply(original, arguments);
-                };
-
-                for (var i = 0; i < this.args.length; i++) {
-                    if (fake.matches(this.args[i])) {
-                        incrementCallCount.call(fake);
-                        push.call(fake.thisValues, this.thisValues[i]);
-                        push.call(fake.args, this.args[i]);
-                        push.call(fake.returnValues, this.returnValues[i]);
-                        push.call(fake.exceptions, this.exceptions[i]);
-                        push.call(fake.callIds, this.callIds[i]);
-                    }
-                }
-                createCallProperties.call(fake);
-
-                return fake;
-            },
-
-            matches: function (args, strict) {
-                var margs = this.matchingAguments;
-
-                if (margs.length <= args.length &&
-                    sinon.deepEqual(margs, args.slice(0, margs.length))) {
-                    return !strict || margs.length == args.length;
-                }
-            },
-
-            printf: function (format) {
-                var spy = this;
-                var args = slice.call(arguments, 1);
-                var formatter;
-
-                return (format || "").replace(/%(.)/g, function (match, specifyer) {
-                    formatter = spyApi.formatters[specifyer];
-
-                    if (typeof formatter == "function") {
-                        return formatter.call(null, spy, args);
-                    } else if (!isNaN(parseInt(specifyer, 10))) {
-                        return sinon.format(args[specifyer - 1]);
-                    }
-
-                    return "%" + specifyer;
-                });
-            }
-        };
-
-        function delegateToCalls(method, matchAny, actual, notCalled) {
-            spyApi[method] = function () {
-                if (!this.called) {
-                    if (notCalled) {
-                        return notCalled.apply(this, arguments);
-                    }
-                    return false;
-                }
-
-                var currentCall;
-                var matches = 0;
-
-                for (var i = 0, l = this.callCount; i < l; i += 1) {
-                    currentCall = this.getCall(i);
-
-                    if (currentCall[actual || method].apply(currentCall, arguments)) {
-                        matches += 1;
-
-                        if (matchAny) {
-                            return true;
-                        }
-                    }
-                }
-
-                return matches === this.callCount;
-            };
-        }
-
-        delegateToCalls("calledOn", true);
-        delegateToCalls("alwaysCalledOn", false, "calledOn");
-        delegateToCalls("calledWith", true);
-        delegateToCalls("calledWithMatch", true);
-        delegateToCalls("alwaysCalledWith", false, "calledWith");
-        delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch");
-        delegateToCalls("calledWithExactly", true);
-        delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly");
-        delegateToCalls("neverCalledWith", false, "notCalledWith",
-            function () { return true; });
-        delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch",
-            function () { return true; });
-        delegateToCalls("threw", true);
-        delegateToCalls("alwaysThrew", false, "threw");
-        delegateToCalls("returned", true);
-        delegateToCalls("alwaysReturned", false, "returned");
-        delegateToCalls("calledWithNew", true);
-        delegateToCalls("alwaysCalledWithNew", false, "calledWithNew");
-        delegateToCalls("callArg", false, "callArgWith", function () {
-            throw new Error(this.toString() + " cannot call arg since it was not yet invoked.");
-        });
-        spyApi.callArgWith = spyApi.callArg;
-        delegateToCalls("callArgOn", false, "callArgOnWith", function () {
-            throw new Error(this.toString() + " cannot call arg since it was not yet invoked.");
-        });
-        spyApi.callArgOnWith = spyApi.callArgOn;
-        delegateToCalls("yield", false, "yield", function () {
-            throw new Error(this.toString() + " cannot yield since it was not yet invoked.");
-        });
-        // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode.
-        spyApi.invokeCallback = spyApi.yield;
-        delegateToCalls("yieldOn", false, "yieldOn", function () {
-            throw new Error(this.toString() + " cannot yield since it was not yet invoked.");
-        });
-        delegateToCalls("yieldTo", false, "yieldTo", function (property) {
-            throw new Error(this.toString() + " cannot yield to '" + property +
-                "' since it was not yet invoked.");
-        });
-        delegateToCalls("yieldToOn", false, "yieldToOn", function (property) {
-            throw new Error(this.toString() + " cannot yield to '" + property +
-                "' since it was not yet invoked.");
-        });
-
-        spyApi.formatters = {
-            c: function (spy) {
-                return sinon.timesInWords(spy.callCount);
-            },
-
-            n: function (spy) {
-                return spy.toString();
-            },
-
-            C: function (spy) {
-                var calls = [];
-
-                for (var i = 0, l = spy.callCount; i < l; ++i) {
-                    var stringifiedCall = "    " + spy.getCall(i).toString();
-                    if (/\n/.test(calls[i - 1])) {
-                        stringifiedCall = "\n" + stringifiedCall;
-                    }
-                    push.call(calls, stringifiedCall);
-                }
-
-                return calls.length > 0 ? "\n" + calls.join("\n") : "";
-            },
-
-            t: function (spy) {
-                var objects = [];
-
-                for (var i = 0, l = spy.callCount; i < l; ++i) {
-                    push.call(objects, sinon.format(spy.thisValues[i]));
-                }
-
-                return objects.join(", ");
-            },
-
-            "*": function (spy, args) {
-                var formatted = [];
-
-                for (var i = 0, l = args.length; i < l; ++i) {
-                    push.call(formatted, sinon.format(args[i]));
-                }
-
-                return formatted.join(", ");
-            }
-        };
-
-        sinon.extend(spy, spyApi);
-
-        spy.spyCall = sinon.spyCall;
-        sinon.spy = spy;
-
-        return spy;
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        require("./call");
-        require("./extend");
-        require("./times_in_words");
-        require("./format");
-        module.exports = makeApi(sinon);
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend util/core.js
- * @depend extend.js
- */
-/**
- * Stub behavior
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @author Tim Fischbach (mail@timfischbach.de)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon) {
-    var slice = Array.prototype.slice;
-    var join = Array.prototype.join;
-    var useLeftMostCallback = -1;
-    var useRightMostCallback = -2;
-
-    var nextTick = (function () {
-        if (typeof process === "object" && typeof process.nextTick === "function") {
-            return process.nextTick;
-        } else if (typeof setImmediate === "function") {
-            return setImmediate;
-        } else {
-            return function (callback) {
-                setTimeout(callback, 0);
-            };
-        }
-    })();
-
-    function throwsException(error, message) {
-        if (typeof error == "string") {
-            this.exception = new Error(message || "");
-            this.exception.name = error;
-        } else if (!error) {
-            this.exception = new Error("Error");
-        } else {
-            this.exception = error;
-        }
-
-        return this;
-    }
-
-    function getCallback(behavior, args) {
-        var callArgAt = behavior.callArgAt;
-
-        if (callArgAt >= 0) {
-            return args[callArgAt];
-        }
-
-        var argumentList;
-
-        if (callArgAt === useLeftMostCallback) {
-            argumentList = args;
-        }
-
-        if (callArgAt === useRightMostCallback) {
-            argumentList = slice.call(args).reverse();
-        }
-
-        var callArgProp = behavior.callArgProp;
-
-        for (var i = 0, l = argumentList.length; i < l; ++i) {
-            if (!callArgProp && typeof argumentList[i] == "function") {
-                return argumentList[i];
-            }
-
-            if (callArgProp && argumentList[i] &&
-                typeof argumentList[i][callArgProp] == "function") {
-                return argumentList[i][callArgProp];
-            }
-        }
-
-        return null;
-    }

<TRUNCATED>

[02/42] ambari git commit: AMBARI-21324 - Ambari 3.0: Outstanding Services page issues (Ishan Bhatt via rzang)

Posted by rl...@apache.org.
AMBARI-21324 - Ambari 3.0: Outstanding Services page issues (Ishan Bhatt via rzang)

Change-Id: Ia8e61e033670b7924abba13ba9fed4153241062f


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/6305fb6a
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/6305fb6a
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/6305fb6a

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 6305fb6ab9839f20eb871eca5d933e6590f20981
Parents: 45a2990
Author: Richard Zang <rz...@apache.org>
Authored: Thu Jun 22 12:29:10 2017 -0700
Committer: Richard Zang <rz...@apache.org>
Committed: Thu Jun 22 12:30:06 2017 -0700

----------------------------------------------------------------------
 ambari-web/app/messages.js                      |  34 ++-
 ambari-web/app/styles/alerts.less               |  52 +++-
 ambari-web/app/styles/application.less          |  91 ++++++-
 ambari-web/app/styles/bootstrap_overrides.less  |  18 +-
 ambari-web/app/styles/dashboard.less            |   9 +-
 .../app/styles/enhanced_service_dashboard.less  |  79 ++++--
 .../templates/common/export_metrics_menu.hbs    |  16 +-
 .../templates/common/widget/gauge_widget.hbs    |  33 ++-
 .../templates/common/widget/graph_widget.hbs    |  44 +--
 .../templates/common/widget/number_widget.hbs   |  33 ++-
 .../templates/common/widget/template_widget.hbs |  35 ++-
 .../main/dashboard/widgets/cluster_metrics.hbs  |  19 +-
 .../app/templates/main/service/info/summary.hbs |  91 +++++--
 .../main/service/info/summary/base.hbs          |  13 +-
 .../service/info/summary/client_components.hbs  |  10 +-
 .../service/info/summary/master_components.hbs  |  26 +-
 .../service/info/summary/slave_components.hbs   |  12 +-
 ambari-web/app/templates/main/service/item.hbs  |  40 +--
 .../templates/main/service/services/hbase.hbs   | 128 +++++----
 .../templates/main/service/services/hdfs.hbs    | 270 ++++++++++---------
 .../templates/main/service/services/hive.hbs    |  13 +-
 .../templates/main/service/services/ranger.hbs  |  59 ++--
 .../templates/main/service/services/storm.hbs   | 118 ++++----
 .../templates/main/service/services/yarn.hbs    | 194 +++++++------
 .../app/views/common/quick_view_link_view.js    |  14 +-
 .../views/common/widget/gauge_widget_view.js    |  14 +-
 .../app/views/main/service/info/summary.js      |  24 ++
 ambari-web/app/views/main/service/service.js    |  13 +-
 .../app/views/main/service/services/hbase.js    |   2 +-
 .../app/views/main/service/services/hdfs.js     |  19 +-
 .../app/views/main/service/services/yarn.js     |   3 +-
 .../common/widget/gauge_widget_view_test.js     |   2 +-
 32 files changed, 937 insertions(+), 591 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 092c5b4..6feebb1 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -341,6 +341,8 @@ Em.I18n.translations = {
   'common.logs': 'Logs',
   'common.warn.message': '<div class="alert alert-warning">{0}</div>',
   'common.link': 'Link',
+  'common.noLink': 'No Links',
+  'common.live': 'Live',
   'common.from.version': 'From Version',
   'common.to.version': 'To Version',
   'common.start.time': 'Start Time',
@@ -1899,12 +1901,10 @@ Em.I18n.translations = {
   'services.service.summary.viewHost':'View Host',
   'services.service.summary.viewHosts':'View Hosts',
   'services.service.summary.clientOnlyService.ToolTip':'Client-only service',
-  'services.service.summary.JournalNodesLive':'JournalNodes Live',
   'services.service.summary.mapreduce2.client':'MapReduce2 Client',
   'services.service.summary.mapreduce2.clients':'MapReduce2 Clients',
   'services.service.summary.nodeManagersLive':'NodeManagers Live',
   'services.service.summary.TrackersLive':'Trackers Live',
-  'services.service.summary.RegionServersLIVE':'RegionServers Live',
   'services.service.summary.PhoenixServersLIVE':'Phoenix Query servers Live',
   'services.service.summary.GangliaMonitorsLIVE':'Ganglia Monitors Live',
   'services.service.summary.SupervisorsLIVE':'Supervisors Live',
@@ -1993,7 +1993,6 @@ Em.I18n.translations = {
   'services.service.actions.run.clearHawqCache.label':'Clear HAWQ\'s HDFS Metadata Cache',
   'services.service.actions.run.runHawqCheck.label':'Run HAWQ Config Check',
   'services.service.actions.manage_configuration_groups.short':'Manage Config Groups',
-  'services.service.actions.serviceActions':'Service Actions',
   'services.service.actions.hsi.alertPopup.header':'Cannot enable Interactive Query',
   'services.service.actions.hsi.alertPopup.body':'You cannot enable Interactive Query now because Interactive Query is in the process of being disabled. This may take a few minutes. Try again later.',
 
@@ -2040,7 +2039,7 @@ Em.I18n.translations = {
   'services.service.summary.ranger.plugin.title': 'Ranger {0} plugin',
   'services.service.summary.ranger.plugin.loadingStatus': 'Loading status...',
 
-  'services.service.summary.alerts.noAlerts': 'No alerts',
+  'services.service.summary.alerts.noAlerts': '0',
   'services.service.summary.alerts.alertsExist': '{0} alerts',
   'services.service.summary.alerts.popup.header': 'Alerts for {0}',
 
@@ -2900,6 +2899,8 @@ Em.I18n.translations = {
   'dashboard.services.uptime':'{0}',
   'dashboard.services.summary.slaves.live': 'Live',
   'dashboard.services.hdfs.summary':'{0} of {1} nodes live, {2}% capacity used',
+  'dashboard.services.hdfs.summary.components': 'COMPONENT',
+  'dashboard.services.hdfs.summary.service-metrics': 'SERVICE METRICS',
   'dashboard.services.hdfs.nanmenode':'NameNode',
   'dashboard.services.hdfs.snanmenode':'Secondary NameNode',
   'dashboard.services.hdfs.journalnodes':'JournalNodes',
@@ -2907,7 +2908,8 @@ Em.I18n.translations = {
   'dashboard.services.hdfs.capacity.dfsUsed':'Disk Usage (DFS Used)',
   'dashboard.services.hdfs.capacity.nonDfsUsed':'Disk Usage (Non DFS Used)',
   'dashboard.services.hdfs.capacity.remaining':'Disk Remaining',
-  'dashboard.services.hdfs.capacityUsed':'{0} / {1} ({2}%)',
+  'dashboard.services.hdfs.capacityUsed':'{0} / {1}',
+  'dashboard.services.hdfs.capacityUsedPercent':'{0}%',
   'dashboard.services.hdfs.totalFilesAndDirs':'Total Files + Directories',
   'dashboard.services.hdfs.datanodes':'DataNodes',
   'dashboard.services.hdfs.datanodecounts':'DataNodes Status',
@@ -2919,9 +2921,12 @@ Em.I18n.translations = {
   'dashboard.services.hdfs.nodes.decom':'decommissioning',
   'dashboard.services.hdfs.nodes.uptime':'NameNode Uptime',
   'dashboard.services.hdfs.nodes.heap':'NameNode Heap',
-  'dashboard.services.hdfs.nodes.heapUsed':'{0} / {1} ({2}% used)',
+  'dashboard.services.hdfs.nodes.heapUsedPercent':'{0}%',
+  'dashboard.services.hdfs.nodes.heapUsed':'{0} / {1}',
+
   'dashboard.services.hdfs.chart.label':'Capacity (Used/Total)',
-  'dashboard.services.hdfs.blockErrors':'{0} corrupt replica / {1} missing / {2} under replicated',
+  'dashboard.services.hdfs.blockErrors':'{0} / {1} / {2}',
+  'dashboard.services.hdfs.blockErrorsDesc':'corrupt replica / missing / under replicated',
   'dashboard.services.hdfs.datanode.status.tooltip.live': 'This is the number of DataNodes that are live as reported from ' +
     'the NameNode. Even if a DataNode process is up, NameNode might see the status as dead ' +
     'if the DataNode is not communicating with the NameNode as expected. This can be due situations ' +
@@ -2940,7 +2945,8 @@ Em.I18n.translations = {
   'dashboard.services.yarn.resourceManager':'ResourceManager',
   'dashboard.services.yarn.nodeManagers':'NodeManagers',
   'dashboard.services.yarn.nodeManager':'NodeManager',
-  'dashboard.services.yarn.nodes.heapUsed':'{0} / {1} ({2}% used)',
+  'dashboard.services.yarn.nodes.heapUsed':'{0} / {1}',
+  'dashboard.services.yarn.nodes.heapUsedPercent':'{0}%',
   'dashboard.services.yarn.clients':'YARN Clients',
   'dashboard.services.yarn.client':'YARN Client',
   'dashboard.services.yarn.resourceManager.uptime':'ResourceManager Uptime',
@@ -2961,11 +2967,14 @@ Em.I18n.translations = {
   'dashboard.services.yarn.nodeManagers.status.tooltip.rebooted': 'This is the number of NodeManagers that are in the rebooted state as reported from the ResourceManager.',
   'dashboard.services.yarn.nodeManagers.status.tooltip.decommissioned': 'This is the number of NodeManagers that are decommissioned as reported from the ResourceManager.',
   'dashboard.services.yarn.containers': 'Containers',
-  'dashboard.services.yarn.containers.msg': '{0} allocated / {1} pending / {2} reserved',
+  'dashboard.services.yarn.containers.msg': '{0} / {1} / {2}',
+  'dashboard.services.yarn.containers.msgDesc': 'allocated / pending / reserved',
   'dashboard.services.yarn.apps': 'Applications',
-  'dashboard.services.yarn.apps.msg': '{0} submitted / {1} running / {2} pending / {3} completed / {4} killed / {5} failed',
+  'dashboard.services.yarn.apps.msg': '{0} / {1} / {2} / {3} / {4} / {5}',
+  'dashboard.services.yarn.apps.msgDesc': 'submitted / running / pending / completed / killed / failed',
   'dashboard.services.yarn.memory': 'Cluster Memory',
-  'dashboard.services.yarn.memory.msg': '{0} used / {1} reserved / {2} available',
+  'dashboard.services.yarn.memory.msg': '{0} / {1} / {2}',
+  'dashboard.services.yarn.memory.msgDesc': 'used / reserved / available',
   'dashboard.services.yarn.queues': 'Queues',
   'dashboard.services.yarn.queues.msg': '{0} Queues',
   'dashboard.services.hawq.hawqSegments':'HAWQ Segments',
@@ -2986,7 +2995,8 @@ Em.I18n.translations = {
   'dashboard.services.hbase.masterServer.standby':'Standby HBase Master',
   'dashboard.services.hbase.noMasterServer':'No Active Master',
   'dashboard.services.hbase.masterServerHeap':'Master Heap',
-  'dashboard.services.hbase.masterServerHeap.summary':'{0} / {1} ({2}% used)',
+  'dashboard.services.hbase.masterServerHeap.summary':'{0} / {1}',
+  'dashboard.services.hbase.masterServerHeap.percent':'{0}%',
   'dashboard.services.hbase.masterServerUptime':'Master Server Uptime',
   'dashboard.services.hbase.averageLoad':'Average Load',
   'dashboard.services.hbase.averageLoadPerServer':'{0} regions per RegionServer',

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/styles/alerts.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/alerts.less b/ambari-web/app/styles/alerts.less
index 60964e2..7db45f1 100644
--- a/ambari-web/app/styles/alerts.less
+++ b/ambari-web/app/styles/alerts.less
@@ -375,9 +375,38 @@
 
 .service-block .summary-box-header {
   .alerts-crit-count, .alerts-warn-count, .no-alerts-label {
-    padding: 4px 5px;
-    margin: 4px;
-    font-size: 14px;
+    padding: 3px 5px;
+    font-size: 10px;
+    border-radius: 50%;
+    min-width: 16px;
+    height: 16px;
+    color: #ffffff;
+    text-align: center;
+    display: inline-block;
+    position: relative;
+    top: -3px;
+  }
+  .glyphicon {
+    color: #999999;
+    cursor: pointer;
+    font-size: 16px;
+    top: 3px;
+    left: 4px;
+  }
+}
+
+.summary-value {
+  .alerts-crit-count, .alerts-warn-count, .no-alerts-label {
+    padding: 2px 3px 2px 3px;
+    font-size: 9px;
+    border-radius: 50%;
+    width: 13px;
+    height: 13px;
+    color: #ffffff;
+    text-align: center;
+    display: inline-block;
+    position: relative;
+    top: -2px;
   }
 }
 
@@ -411,10 +440,19 @@
 
 .service-alerts-popup {
   .modal {
-    .modal-content {
-      .modal-body {
-        padding-left: 0;
-        padding-right: 0;
+    .modal-dialog{
+      width: 800px;
+      .modal-content {
+        height: 500px;
+        .modal-body {
+          padding-left: 0;
+          padding-right: 0;
+          height: 70%;
+          font-size: 14px;
+          .definition-latest-text {
+            font-size: 12px;
+          }
+        }
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/styles/application.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/application.less b/ambari-web/app/styles/application.less
index 8ae11b5..29788bc 100644
--- a/ambari-web/app/styles/application.less
+++ b/ambari-web/app/styles/application.less
@@ -26,6 +26,7 @@ body {
 
 html, body {
   height: 100%;
+  background-color: #f0f0f0;
 }
 
 .form-text {
@@ -76,7 +77,6 @@ footer {
   position: relative;
   border-top: 1px solid #e5e5e5;
   padding: 30px 0;
-  background-color: #fff;
   color: #666;
   margin-top: -1 * @footer-height - 1;
   height: @footer-height - 60px;
@@ -346,7 +346,7 @@ footer {
 }
 
 #content {
-  padding: 15px 0;
+  padding: 0 0 15px 0;
 }
 
 .badge-important {
@@ -1042,12 +1042,12 @@ a:focus {
 .services, .summary-info {
   .tab-marker-position(@color) {
     color: @color;
-    background-position:  0 3px;
+    background-position:  0 7px;
     background-repeat: no-repeat;
     list-style: none;
-    height: 20px;
-    width: 20px;
-    margin-left: 0;
+    height: 13px;
+    width: 13px;
+    margin: 0 3px 0 0 ;
     display: inline !important;
     float: none !important;
   }
@@ -1079,13 +1079,21 @@ a:focus {
   .upgrade-status-warning {
     color: @health-status-red;
   }
+
+  .col-md-3 {
+    min-height: 100px;
+    margin-left: 2px;
+    min-width: 150px;
+  }
   .summary-label {
-    text-align: right;
+    font-size: 12px;
+    text-transform: uppercase;
+    margin-top: 5px;
   }
-  a {
-    text-decoration: underline;
-    &:hover {
-      text-decoration: none;
+  .summary-value {
+    color: #333333;
+    span {
+      display: inline-block;
     }
   }
 }
@@ -1383,6 +1391,28 @@ a.services-menu-blocks{
 
 .service-block {
   margin-top: 20px;
+  .summary-links-block {
+    display: flex;
+    display: -webkit-flex;
+    display: -moz-flex;
+    display: -ms-flex;
+    display: -o-flex;
+  }
+  .panel, .panel-heading{
+    border: none;
+  }
+  .panel-title {
+    font-size: 20px;
+  }
+  .service-alerts {
+    margin-top: 10px;
+  }
+  .quick-links-block {
+    .panel-body > a{
+      display: block;
+      margin-bottom: 5px;
+    }
+  }
 }
 
 .service-button {
@@ -2701,4 +2731,43 @@ a.abort-icon:hover {
   padding: 0px;
   border: none;
   background: none;
+}
+
+.summary-block {
+  flex: 1;
+  .metrics-summary {
+    margin-top:40px;
+  }
+  .component-summary, .metrics-summary {
+    .col-md-2 {
+      float:left;
+      padding-left: 0px;
+      top: 7px;
+      font-size: 12px;
+      font-weight: bold;
+    }
+    .col-md-10 {
+      float: right;
+    }
+    .main-info {
+      font-size: 16px;
+    }
+    .info-desc {
+      font-size: 12px;
+      color: #999999;
+    }
+  }
+}
+
+.quick-links-block {
+  width: 18%;
+  margin: 0 0 20px 20px;
+  .col-lg-12 {
+    float: none !important;
+  }
+  .panel-body {
+    padding-top: 0px;
+    color: #999999;
+    font-size: 12px;
+  }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/styles/bootstrap_overrides.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/bootstrap_overrides.less b/ambari-web/app/styles/bootstrap_overrides.less
index 0960a52..8ba49d1 100644
--- a/ambari-web/app/styles/bootstrap_overrides.less
+++ b/ambari-web/app/styles/bootstrap_overrides.less
@@ -106,7 +106,7 @@ select.form-control {
 .panel {
   background-color: #fff;
   .panel-heading {
-    background-color: #f0f0f0;
+    background-color: #fff;
     .panel-title {
       line-height: 34px;
     }
@@ -285,6 +285,10 @@ select.form-control {
   color: #fff;
 }
 
+.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
+  background-color: #f0f0f0;
+}
+
 @media (max-width: 992px) {
   .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
     float: left;
@@ -347,10 +351,14 @@ select.form-control {
     width: 1130px;
   }
 
-  .main-container {
+  .main-container, .container {
     width: 1170px;
   }
 
+  #top-nav {
+    min-width: 1170px;
+  }
+
   .contribview  .main-container {
     width: auto;
   }
@@ -395,10 +403,14 @@ select.form-control {
     width: 1300px;
   }
 
-  .main-container {
+  .main-container, .container {
     width: 1340px;
   }
 
+  #top-nav {
+    min-width: 1340px;
+  }
+
   .contribview  .main-container {
     width: auto;
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/styles/dashboard.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/dashboard.less b/ambari-web/app/styles/dashboard.less
index 913fc35..f413caa 100644
--- a/ambari-web/app/styles/dashboard.less
+++ b/ambari-web/app/styles/dashboard.less
@@ -31,7 +31,7 @@
     clear: both;
     display: inline-block;
     padding: 10px;
-    background-color: #ececec;
+    background-color: #ffffff;
   }
   #widgets-options-menu {
     .add-widgets-text .dropdown-menu {
@@ -79,13 +79,14 @@
 
     .img-thumbnail .corner-icon {
       position: relative;
-      color: #999999;
+      color: #666666;
       font-size: 14px;
-      padding: 10px 15px 20px 15px;
+      padding: 10px 15px 0 0;
       float: right;
       ul {
         top: inherit;
-        margin-left: 20px;
+        display: none;
+        border-radius: 2px;
       }
       li{
         padding: 2.5px 0 2.5px 5px;

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/styles/enhanced_service_dashboard.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/enhanced_service_dashboard.less b/ambari-web/app/styles/enhanced_service_dashboard.less
index 1dd645b..34a4763 100644
--- a/ambari-web/app/styles/enhanced_service_dashboard.less
+++ b/ambari-web/app/styles/enhanced_service_dashboard.less
@@ -24,14 +24,20 @@
 
 .service-metrics-block {
 
+  clear: both;
+
   #add-widget-action-box {
     background-color: @add-widget-btn-color;
-    width: 98%;
+    width: 97%;
+    height: 100%;
     padding: 43px;
     border: 1px solid @border-color;
-    border-radius: 0;
-    -webkit-border-radius: 0;
-    -moz-border-radius: 0;
+    border-radius: 2px;
+    -webkit-border-radius: 2px;
+    -moz-border-radius: 2px;
+    -webkit-box-shadow: 0px 1px 1px 0px rgba(51, 51, 51, 0.15);
+    -moz-box-shadow: 0px 1px 1px 0px rgba(51, 51, 51, 0.15);
+    box-shadow: 0px 1px 1px 0px rgba(51, 51, 51, 0.15);
     background-image: none;
     .glyphicon-plus {
       font-size: 70px;
@@ -50,6 +56,10 @@
       right: -5px;
     }
   }
+
+  .actions {
+    margin-right: 5px;
+  }
 }
 
 #widget_layout,
@@ -59,7 +69,8 @@
     width: 93%;
   }
   .span2p4 {
-    width: 19.3%;
+    width: 22.7%;
+    height: 100%;
     background-color: white;
     margin: 5px 0 5px 5px;
     float: left;
@@ -74,8 +85,8 @@
     }
     .title {
       padding: 4px 0 0 1px;
-      font-weight: bold;
-      font-size: 13px;
+      font-size: 14px;
+      color: #666666;
       line-height: 17px;
       text-align: left;
       height: 40px;
@@ -88,9 +99,8 @@
     }
     .content {
       text-align: center;
-      color: @health-status-green;
-      font-weight: bold;
-      font-size: 35px;
+      color: #666666;
+      font-size: 30px;
       width: 95%;
     }
     .template-widget {
@@ -170,10 +180,10 @@
       color: @health-status-orange;
     }
     .green {
-      color: @health-status-green;
+      color: #666666;
     }
     .grey {
-      color: #D6DDDF;
+      color: #999999;
     }
   }
 }
@@ -183,9 +193,6 @@
   margin: auto;
   margin-bottom: 20px;
   .widget {
-    .img-thumbnail .corner-icon {
-      display: none;
-    }
     .graph-widget {
       .chart-container {
         cursor: default;
@@ -198,8 +205,11 @@
   .widget {
     .img-thumbnail {
       box-sizing: content-box;
+      border-radius: 2px;
+      -webkit-box-shadow: 0px 1px 1px 0px rgba(51, 51, 51, 0.15);
+      -moz-box-shadow: 0px 1px 1px 0px rgba(51, 51, 51, 0.15);
+      box-shadow: 0px 1px 1px 0px rgba(51, 51, 51, 0.15);
       .corner-icon {
-        display: none;
         .glyphicon-remove-sign{
           color: #000;
           text-shadow: #fff 0 0 15px;
@@ -212,18 +222,31 @@
         position: absolute;
         right: 5px;
         top: 6px;
-        .corner-icon {
-          i {
-            position: relative;
-            color: #555;
-            font-weight: bold;
-            text-shadow: #fff -8px 8px 8px, #fff 8px 8px 8px, #fff -8px -8px 8px, #fff 8px -8px 8px;
-            background-color: rgba(255,255,255,0.6);
-            padding: 5px 5px 5px 2px;
-          }
-          &.hidden i {
-            display: none;
-          }
+        ul {
+          display: none;
+          border-radius: 2px;
+        }
+        a {
+          padding: 3px 5px;
+          cursor: pointer;
+          color: #666666;
+        }
+        li:hover {
+          background-color: #f5f5f5;
+        }
+        i {
+          position: relative;
+          text-shadow: #fff -8px 8px 8px, #fff 8px 8px 8px, #fff -8px -8px 8px, #fff 8px -8px 8px;
+          background-color: rgba(255,255,255,0.6);
+          padding: 5px 5px 5px 2px;
+        }
+      }
+      .widget-icons:hover {
+        .ellipsis-menu::after {
+          color: #666666;
+        }
+        ul {
+          display: block;
         }
       }
       .export-graph-list {

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/templates/common/export_metrics_menu.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/export_metrics_menu.hbs b/ambari-web/app/templates/common/export_metrics_menu.hbs
index 0d4ead9..c48065a 100644
--- a/ambari-web/app/templates/common/export_metrics_menu.hbs
+++ b/ambari-web/app/templates/common/export_metrics_menu.hbs
@@ -16,17 +16,7 @@
 * limitations under the License.
 }}
 
-<ul class="dropdown-menu">
-  <li><button {{action exportGraphData view.parentView.exportToCSVArgument target="view.parentView"}}
-          class="button-border">
-    <i class="icon-file-text"></i>&nbsp;{{t common.csv}}</button>
-  </li>
-  <li><button {{action exportGraphData target="view.parentView"}}
-          class="button-border">
-    <i class="icon-file-text-alt"></i>&nbsp;{{t common.json}}</button>
-  </li>
-  <li><button {{action deleteWidget target="view.parentView"}} href="#"
-          class="button-border">
-    <i class="icon-trash"></i>&nbsp;{{t common.delete}}</button>
-  </li>
+<ul class="export-graph-list pull-right dropdown-menu">
+  <li><a {{action exportGraphData view.parentView.exportToCSVArgument target="view.parentView"}}>{{t common.csv}}</a></li>
+  <li><a {{action exportGraphData target="view.parentView"}}>{{t common.json}}</a></li>
 </ul>

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/templates/common/widget/gauge_widget.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/widget/gauge_widget.hbs b/ambari-web/app/templates/common/widget/gauge_widget.hbs
index 83d4a49..9c776b3 100644
--- a/ambari-web/app/templates/common/widget/gauge_widget.hbs
+++ b/ambari-web/app/templates/common/widget/gauge_widget.hbs
@@ -18,19 +18,28 @@
 
 <div class="gauge-widget img-thumbnail">
   {{#if view.isLoaded}}
-    <a {{bindAttr class=":corner-icon :col-md-1 view.parentView.isMoving:hidden"}} href="#" {{action hideWidget view.id target="view"}}>
-      <i class="glyphicon-remove-sign glyphicon glyphicon-large"></i>
-    </a>
     <div class="caption title col-md-11">{{view.content.widgetName}}</div>
-    <div class="widget-icons">
-      {{#if controller.isAmbariMetricsInstalled}}
-        <a class="corner-icon pull-right" href="#" {{action editWidget target="view"}}>
-          <i class="glyphicon glyphicon-edit"></i>
-        </a>
-        <a class="corner-icon pull-right" href="#" {{action cloneWidget target="view"}}>
-          <i class="glyphicon glyphicon-copy"></i>
-        </a>
-      {{/if}}
+    <div {{bindAttr class="view.parentView.isMoving:hidden :corner-icon :widget-icons"}}>
+      <button class="dropdown-toggle ellipsis-menu button-border" data-toggle="dropdown" href="#"></button>
+      <ul class="dropdown-menu">
+        {{#if controller.isAmbariMetricsInstalled}}
+          <li>
+            <a href="#" {{action editWidget target="view"}}>
+              <i class="icon-pencil"></i>&nbsp;{{t common.edit}}
+            </a>
+          </li>
+          <li>
+            <a href="#" {{action cloneWidget target="view"}}>
+              <i class="icon-copy"></i>&nbsp;{{t common.clone}}
+            </a>
+          </li>
+        {{/if}}
+        <li>
+          <a href="#" {{action hideWidget view.id target="view"}}>
+            <i class="icon-trash"></i>&nbsp;{{t common.delete}}
+          </a>
+        </li>
+      </ul>
     </div>
     <div class="content">
       {{#if view.isUnavailable}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/templates/common/widget/graph_widget.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/widget/graph_widget.hbs b/ambari-web/app/templates/common/widget/graph_widget.hbs
index 9784a83..010b77f 100644
--- a/ambari-web/app/templates/common/widget/graph_widget.hbs
+++ b/ambari-web/app/templates/common/widget/graph_widget.hbs
@@ -18,24 +18,38 @@
 
 <div class="graph-widget img-thumbnail">
   {{#if view.isLoaded}}
-    <a {{bindAttr class=":corner-icon :col-md-1 view.parentView.isMoving:hidden"}} href="#" {{action hideWidget view.id target="view"}}>
-      <i class="glyphicon-remove-sign glyphicon glyphicon-large"></i>
-    </a>
     <div class="caption title col-md-11">{{view.content.widgetName}}</div>
-      <div class="widget-icons">
-        <a {{bindAttr class="view.isExportButtonHidden:hidden :corner-icon :pull-right"}} href="#" {{action toggleFormatsList target="view"}}>
-          <i class="glyphicon glyphicon-save"></i>
-        </a>
+    <div {{bindAttr class="view.parentView.isMoving:hidden :corner-icon :widget-icons"}}>
+      <button class="dropdown-toggle ellipsis-menu button-border" data-toggle="dropdown" href="#"></button>
+      <ul class="dropdown-menu">
+        <li>
+          <a href="#" {{bindAttr class="view.isExportButtonHidden:hidden"}}
+            {{action exportGraphData view.exportToCSVArgument target="view"}}>
+            <i class="icon-file-text"></i>&nbsp;{{t common.csv}}</a>
+        </li>
+        <li>
+          <a href="#" {{bindAttr class="view.isExportButtonHidden:hidden"}}
+            {{action exportGraphData target="view"}}><i class="icon-file-text-alt"></i>&nbsp;{{t common.json}}</a>
+        </li>
         {{#if controller.isAmbariMetricsInstalled}}
-          <a class="corner-icon pull-right" href="#" {{action editWidget target="view"}}>
-            <i class="glyphicon glyphicon-edit"></i>
-          </a>
-          <a class="corner-icon pull-right" href="#" {{action cloneWidget target="view"}}>
-            <i class="glyphicon glyphicon-copy"></i>
-          </a>
+          <li>
+            <a href="#" href="#" {{action editWidget target="view"}}>
+              <i class="icon-pencil"></i>&nbsp;{{t common.edit}}
+            </a>
+          </li>
+          <li>
+            <a href="#" {{action cloneWidget target="view"}}>
+              <i class="icon-copy"></i>&nbsp;{{t common.clone}}
+            </a>
+          </li>
         {{/if}}
-        {{view view.exportMetricsMenuView}}
-      </div>
+        <li>
+          <a href="#" {{action hideWidget view.id target="view"}}>
+            <i class="icon-trash"></i>&nbsp;{{t common.delete}}
+          </a>
+        </li>
+      </ul>
+    </div>
     <div class="content"> {{view view.graphView}}</div>
 
   {{else}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/templates/common/widget/number_widget.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/widget/number_widget.hbs b/ambari-web/app/templates/common/widget/number_widget.hbs
index 42d6aa0..c145912 100644
--- a/ambari-web/app/templates/common/widget/number_widget.hbs
+++ b/ambari-web/app/templates/common/widget/number_widget.hbs
@@ -18,19 +18,28 @@
 
 <div class="number-widget img-thumbnail">
   {{#if view.isLoaded}}
-    <a {{bindAttr class=":corner-icon :col-md-1 view.parentView.isMoving:hidden"}} href="#" {{action hideWidget view.id target="view"}}>
-      <i class="glyphicon-remove-sign glyphicon glyphicon-large"></i>
-    </a>
     <div class="caption title col-md-11">{{view.content.widgetName}}</div>
-    <div class="widget-icons">
-      {{#if controller.isAmbariMetricsInstalled}}
-        <a class="corner-icon pull-right" href="#" {{action editWidget target="view"}}>
-          <i class="glyphicon glyphicon-edit"></i>
-        </a>
-        <a class="corner-icon pull-right" href="#" {{action cloneWidget target="view"}}>
-          <i class="glyphicon glyphicon-copy"></i>
-        </a>
-      {{/if}}
+    <div {{bindAttr class="view.parentView.isMoving:hidden :corner-icon :widget-icons"}}>
+      <button class="dropdown-toggle ellipsis-menu button-border" data-toggle="dropdown" href="#"></button>
+      <ul class="dropdown-menu">
+        {{#if controller.isAmbariMetricsInstalled}}
+          <li>
+            <a href="#" {{action editWidget target="view"}}>
+              <i class="icon-pencil"></i>&nbsp;{{t common.edit}}
+            </a>
+          </li>
+          <li>
+            <a href="#" {{action cloneWidget target="view"}}>
+              <i class="icon-copy"></i>&nbsp;{{t common.clone}}
+            </a>
+          </li>
+        {{/if}}
+        <li>
+          <a href="#" {{action hideWidget view.id target="view"}}>
+            <i class="icon-trash"></i>&nbsp;{{t common.delete}}
+          </a>
+        </li>
+      </ul>
     </div>
     <div {{bindAttr class="view.contentColor :content"}}>{{view.displayValue}}</div>
     {{#if view.content.description}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/templates/common/widget/template_widget.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/widget/template_widget.hbs b/ambari-web/app/templates/common/widget/template_widget.hbs
index aeebdcf..20438f9 100644
--- a/ambari-web/app/templates/common/widget/template_widget.hbs
+++ b/ambari-web/app/templates/common/widget/template_widget.hbs
@@ -18,20 +18,29 @@
 
 <div class="template-widget img-thumbnail">
   {{#if view.isLoaded}}
-    <a {{bindAttr class=":corner-icon :col-md-1 view.parentView.isMoving:hidden"}} href="#" {{action hideWidget view.id target="view"}}>
-      <i class="glyphicon-remove-sign glyphicon glyphicon-large"></i>
-    </a>
     <div class="caption title col-md-11">{{view.content.widgetName}}</div>
-    <div class="widget-icons">
-      {{#if controller.isAmbariMetricsInstalled}}
-        <a class="corner-icon pull-right" href="#" {{action editWidget target="view"}}>
-          <i class="glyphicon glyphicon-edit"></i>
-        </a>
-        <a class="corner-icon pull-right" href="#" {{action cloneWidget target="view"}}>
-          <i class="glyphicon glyphicon-copy"></i>
-        </a>
-      {{/if}}
-      </div>
+    <div {{bindAttr class="view.parentView.isMoving:hidden :corner-icon :widget-icons"}}>
+      <button class="dropdown-toggle ellipsis-menu button-border" data-toggle="dropdown" href="#"></button>
+      <ul class="dropdown-menu">
+        {{#if controller.isAmbariMetricsInstalled}}
+          <li>
+            <a href="#" {{action editWidget target="view"}}>
+              <i class="icon-pencil"></i>&nbsp;{{t common.edit}}
+            </a>
+          </li>
+          <li>
+            <a href="#" {{action cloneWidget target="view"}}>
+              <i class="icon-copy"></i>&nbsp;{{t common.clone}}
+            </a>
+          </li>
+        {{/if}}
+        <li>
+          <a href="#" {{action hideWidget view.id target="view"}}>
+            <i class="icon-trash"></i>&nbsp;{{t common.delete}}
+          </a>
+        </li>
+      </ul>
+    </div>
     <div {{bindAttr class="view.contentColor :content"}}>{{{view.displayValue}}}</div>
     {{#if view.content.description}}
       <div class="hidden-description">

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/templates/main/dashboard/widgets/cluster_metrics.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/dashboard/widgets/cluster_metrics.hbs b/ambari-web/app/templates/main/dashboard/widgets/cluster_metrics.hbs
index 18f2201..c35ca4e 100644
--- a/ambari-web/app/templates/main/dashboard/widgets/cluster_metrics.hbs
+++ b/ambari-web/app/templates/main/dashboard/widgets/cluster_metrics.hbs
@@ -21,9 +21,22 @@
     <li class="img-thumbnail row">
       <div class="caption col-md-10">{{view.title}}</div>
       <div class="corner-icon col-md-1">
-        <button class="dropdown-toggle ellipsis-menu button-border" data-toggle="dropdown" href="#"
-          {{action toggleFormatsList target="view"}}></button>
-        {{view view.exportMetricsMenuView}}
+        <button class="dropdown-toggle ellipsis-menu button-border" data-toggle="dropdown" href="#"></button>
+        <ul class="dropdown-menu">
+          <li>
+            <button type="button" href="#" {{bindAttr class="view.isExportButtonHidden:hidden :button-border"}}
+              {{action exportGraphData view.exportToCSVArgument target="view"}}>
+              <i class="icon-file-text"></i>&nbsp;{{t common.csv}}</button>
+          </li>
+          <li>
+            <button type="button" href="#" {{bindAttr class="view.isExportButtonHidden:hidden :button-border"}}
+              {{action exportGraphData target="view"}}><i class="icon-file-text-alt"></i>&nbsp;{{t common.json}}</button>
+          </li>
+          <li><button type="button" href="#" class="button-border"
+            {{action deleteWidget target="view"}}>
+            <i class="icon-trash"></i>&nbsp;{{t common.delete}}</button>
+          </li>
+        </ul>
       </div>
       {{#if view.isDataLoaded}}
         {{#if view.childViews.lastObject.hasData}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/templates/main/service/info/summary.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/info/summary.hbs b/ambari-web/app/templates/main/service/info/summary.hbs
index c142464..789a6fc 100644
--- a/ambari-web/app/templates/main/service/info/summary.hbs
+++ b/ambari-web/app/templates/main/service/info/summary.hbs
@@ -47,35 +47,80 @@
 {{/if}}
 
 <div class="service-block">
-  <div class="panel panel-default">
-    <div class="panel-heading summary-box-header">
-      <div class="row">
-        <div class="col-md-8 col-lg-8">
-          <h4 class="panel-title">{{controller.content.label}} {{t services.service.info.menu.summary}}</h4>
+  <div class="summary-links-block">
+    <div class="panel panel-default summary-block">
+      <div class="panel-heading summary-box-header">
+        <div class="row">
+          <div class="col-md-8 col-lg-8">
+            <h4 class="panel-title">{{controller.content.label}} {{t services.service.info.menu.summary}}</h4>
+          </div>
+          <div class="col-md-4 col-lg-4 service-alerts">
+            {{#if view.hasAlertDefinitions}}
+              <span {{action "showServiceAlertsPopup" controller.content target="controller"}} class="pull-right">
+                <i class="glyphicon glyphicon-bell"></i>
+                {{#if view.alertsCount}}
+                  <span {{bindAttr class=":label view.hasCriticalAlerts:alerts-crit-count:alerts-warn-count"}}>
+                    {{view.alertsCount}}</span>
+                {{else}}
+                  <span class="label no-alerts-label">{{t services.service.summary.alerts.noAlerts}}</span>
+                {{/if}}
+              </span>
+            {{/if}}
+          </div>
+        </div>
+      </div>
+      <div class="panel-body">
+        {{#if view.serviceSummaryView}}
+          {{view view.serviceSummaryView}}
+        {{else}}
+          {{view App.SpinnerView}}
+        {{/if}}
+      </div>
+    </div>
+
+    <div class="panel panel-default quick-links-block">
+      {{#view App.QuickLinksView contentBinding="view.svc"}}
+        <div class="panel-heading">
+          <div class="row col-md-8 col-lg-12">
+            <h4 class="panel-title">{{t common.quickLinks}}</h4>
+          </div>
         </div>
-        <div class="col-md-4 col-lg-4">
-          {{#if view.hasAlertDefinitions}}
-            {{#if view.alertsCount}}
-              <span {{action "showServiceAlertsPopup" controller.content target="controller"}}
-                {{bindAttr class=":label :pull-right view.hasCriticalAlerts:alerts-crit-count:alerts-warn-count"}}>
-            {{view.alertsCount}} {{pluralize view.alertsCount singular="alert" plural="alerts"}}</span>
+        <div class="panel-body">
+          {{#if view.showQuickLinks}}
+            {{#if view.isLoaded}}
+              {{#if view.quickLinksArray}}
+                <!--there are multiple masters eg, HBase multiple masters or HDFS HA enabled-->
+                {{#each quickLinks in view.quickLinksArray}}
+                  <a href="javascript:void(null)">{{quickLinks.publicHostNameLabel}} &nbsp;</a>
+                  {{#each quickLinks}}
+                    <a {{bindAttr href="url"}} target="_blank">{{label}}</a>
+                  {{/each}}
+                {{/each}}
+              {{else}}
+                {{#if view.quickLinks}}
+                  {{#each view.quickLinks}}
+                    <a {{bindAttr href="url"}} target="_blank">{{label}}</a>
+                  {{/each}}
+                {{else}}
+                  <div class="alert alert-danger">
+                    <small>{{t quick.links.error.quicklinks.unavailable.label}}</small>
+                  </div>
+                {{/if}}
+              {{/if}}
             {{else}}
-              <span {{action "showServiceAlertsPopup" controller.content target="controller"}}
-                class="label pull-right no-alerts-label">{{t services.service.summary.alerts.noAlerts}}</span>
+              {{view App.SpinnerView}}
+            {{/if}}
+          {{else}}
+            {{#if view.showNoLinks}}
+              {{t common.noLink}}
+            {{else}}
+              {{view App.SpinnerView}}
             {{/if}}
           {{/if}}
         </div>
-      </div>
-    </div>
-    <div class="panel-body">
-      {{#if view.serviceSummaryView}}
-        {{view view.serviceSummaryView}}
-      {{else}}
-        {{view App.SpinnerView}}
-      {{/if}}
+      {{/view}}
     </div>
   </div>
-
   {{! widgets in the metrics panel are loaded seperately from summary page text information
       and does not get block due to any global API poller information }}
   {{#if view.isServiceMetricLoaded}}
@@ -136,7 +181,7 @@
               {{#if isAmbariMetricsInstalled}}
                 <div class="span2p4">
                   <button id="add-widget-action-box"
-                          {{action "goToWidgetsBrowser" controller.content target="controller"}}
+                    {{action "goToWidgetsBrowser" controller.content target="controller"}}
                           rel="add-widget-tooltip" {{translateAttr data-original-title="dashboard.widgets.addButton.tooltip"}}>
                     <i class="glyphicon glyphicon-plus"></i></button>
                 </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/templates/main/service/info/summary/base.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/info/summary/base.hbs b/ambari-web/app/templates/main/service/info/summary/base.hbs
index 9b16502..10fe4cb 100644
--- a/ambari-web/app/templates/main/service/info/summary/base.hbs
+++ b/ambari-web/app/templates/main/service/info/summary/base.hbs
@@ -16,8 +16,13 @@
 * limitations under the License.
 }}
 
-<div class="col-md-6">
-  {{view App.SummaryMasterComponentsView mastersCompBinding="view.parentView.mastersObj"}}
-  {{view App.SummarySlaveComponentsView slavesObjBinding="view.parentView.slavesObj"}}
-  {{view App.SummaryClientComponentsView clientsObjBinding="view.parentView.clientObj"}}
+<div class="row">
+  <div class="col-md-12 component-summary">
+    <div class="col-md-2">{{t dashboard.services.hdfs.summary.components}}</div>
+    <div class="col-md-10">
+      {{view App.SummaryMasterComponentsView mastersCompBinding="view.parentView.mastersObj"}}
+      {{view App.SummarySlaveComponentsView slavesObjBinding="view.parentView.slavesObj"}}
+      {{view App.SummaryClientComponentsView clientsObjBinding="view.parentView.clientObj"}}
+    </div>
+  </div>
 </div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/templates/main/service/info/summary/client_components.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/info/summary/client_components.hbs b/ambari-web/app/templates/main/service/info/summary/client_components.hbs
index 1bef250..ea9a5c8 100644
--- a/ambari-web/app/templates/main/service/info/summary/client_components.hbs
+++ b/ambari-web/app/templates/main/service/info/summary/client_components.hbs
@@ -17,14 +17,14 @@
 }}
 
 {{#each clientComponent in view.clientsObj}}
-  <div class="row">
-    <div {{bindAttr class=":col-md-6 :summary-label clientComponent.summaryLabelClassName"}}>
+  <div class="row col-md-3">
+    <div {{bindAttr class=":summary-value :main-info clientComponent.summaryValueClassName"}}>
+      <span class="green-live">{{clientComponent.installedCount}}</span>  {{t common.installed}}
+    </div>
+    <div {{bindAttr class=":summary-label clientComponent.summaryLabelClassName"}}>
       <a {{action filterHosts clientComponent}} href="javascript:void(null)" >
         {{clientComponent.displayNamePluralized}}
       </a>
     </div>
-    <div {{bindAttr class=":col-md-6 :summary-value clientComponent.summaryValueClassName"}}>
-      <span class="green-live">{{clientComponent.installedCount}}</span> {{clientComponent.displayNamePluralized}} {{t common.installed}}
-    </div>
   </div>
 {{/each}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/templates/main/service/info/summary/master_components.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/info/summary/master_components.hbs b/ambari-web/app/templates/main/service/info/summary/master_components.hbs
index 5b7b47b..8126d1f 100644
--- a/ambari-web/app/templates/main/service/info/summary/master_components.hbs
+++ b/ambari-web/app/templates/main/service/info/summary/master_components.hbs
@@ -17,22 +17,13 @@
 }}
 
 {{#each comp in view.mastersComp}}
-  <div {{bindAttr class="comp.isSubComponent:component-small :component comp.componentName :row"}}>
-    <div {{bindAttr class=":col-md-6 :summary-label comp.summaryLabelClassName"}}>
-      <a href="#" {{action showDetails comp.host}} data-original-title="{{unbound comp.publicHostName}}" rel="UsageTooltip">
-        {{#if comp.displayNameAdvanced}}
-          {{comp.displayNameAdvanced}}
-        {{else}}
-          {{comp.displayName}}
-        {{/if}}
-      </a>
-    </div>
-    <div {{bindAttr class=":col-md-6 :summary-value comp.summaryValueClassName"}}>
+  <div {{bindAttr class="comp.isSubComponent:component-small :component :col-md-3 comp.componentName :row"}}>
+    <div {{bindAttr class=":summary-value comp.summaryValueClassName"}}>
       <span rel='SummaryComponentHealthTooltip' {{bindAttr class="comp.statusClass comp.statusIconClass" data-original-title="comp.passiveTooltip"}}></span>
-      {{comp.componentTextStatus}}
+      <span class="main-info">{{comp.componentTextStatus}}</span>
       {{#if comp.alertsCount}}
         <span {{action "showServiceAlertsPopup" comp target="controller"}} {{bindAttr class=":label comp.hasCriticalAlerts:alerts-crit-count:alerts-warn-count"}}>
-          {{comp.alertsCount}} {{pluralize comp.alertsCount singular="alert" plural="alerts"}}
+          {{comp.alertsCount}}
         </span>
       {{else}}
         <span {{action "showServiceAlertsPopup" comp target="controller"}} class="label no-alerts-label">
@@ -40,5 +31,14 @@
         </span>
       {{/if}}
     </div>
+    <div {{bindAttr class=":summary-label comp.summaryLabelClassName"}}>
+      <a href="#" {{action showDetails comp.host}} data-original-title="{{unbound comp.publicHostName}}" rel="UsageTooltip">
+        {{#if comp.displayNameAdvanced}}
+          {{comp.displayNameAdvanced}}
+        {{else}}
+          {{comp.displayName}}
+        {{/if}}
+      </a>
+    </div>
   </div>
 {{/each}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/templates/main/service/info/summary/slave_components.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/info/summary/slave_components.hbs b/ambari-web/app/templates/main/service/info/summary/slave_components.hbs
index 9076c7f..3483f17 100644
--- a/ambari-web/app/templates/main/service/info/summary/slave_components.hbs
+++ b/ambari-web/app/templates/main/service/info/summary/slave_components.hbs
@@ -17,15 +17,15 @@
 }}
 
 {{#each slaveComponent in view.slavesObj}}
-  <div {{bindAttr class=":row :component slaveComponent.componentName"}}>
-    <div {{bindAttr class=":col-md-6 :summary-label slaveComponent.summaryLabelClassName"}}>
-      <a href="#" {{action filterHosts slaveComponent}}>{{slaveComponent.displayNamePluralized}}</a>
-    </div>
-    <div {{bindAttr class=":col-md-6 :summary-value slaveComponent.summaryValueClassName"}}>
+  <div {{bindAttr class=":row :component :col-md-3 slaveComponent.componentName"}}>
+    <div {{bindAttr class=":summary-value :main-info slaveComponent.summaryValueClassName"}}>
       {{#view App.ComponentLiveTextView liveComponentsBinding="slaveComponent.startedCount" totalComponentsBinding="slaveComponent.totalCount" tagName="span"}}
         {{view.liveComponents}}/{{view.totalComponents}}
       {{/view}}
-      {{slaveComponent.displayNamePluralized}} {{t dashboard.services.summary.slaves.live}}
+      {{t dashboard.services.summary.slaves.live}}
+    </div>
+    <div {{bindAttr class=":summary-label slaveComponent.summaryLabelClassName"}}>
+      <a href="#" {{action filterHosts slaveComponent}}>{{slaveComponent.displayNamePluralized}}</a>
     </div>
   </div>
 {{/each}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/templates/main/service/item.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/item.hbs b/ambari-web/app/templates/main/service/item.hbs
index 64c4c7e..e942eb1 100644
--- a/ambari-web/app/templates/main/service/item.hbs
+++ b/ambari-web/app/templates/main/service/item.hbs
@@ -17,51 +17,13 @@
 }}
 
 {{view App.MainServiceInfoMenuView configTabBinding="view.hasConfigTab" heatmapTabBinding="view.hasHeatmapTab"}}
-  <div class="col-md-3 quick-links-wrapper">
-    {{#view App.QuickLinksView contentBinding="view.service"}}
-      {{#if view.showQuickLinks}}
-        <ul class="nav nav-pills move">
-          <li class="dropdown quick-links-dropdown">
-            <a class="dropdown-toggle" id="quick-links-dropdown-btn" data-toggle="dropdown" href="#">{{t common.quickLinks}}<b class="caret"></b></a>
-            <ul class="dropdown-menu">
-              {{#if view.isLoaded}}
-                {{#if view.quickLinksArray}}
-                  <!--there are multiple masters eg, HBase multiple masters or HDFS HA enabled-->
-                  {{#each quickLinks in view.quickLinksArray}}
-                    <li class="dropdown-submenu">
-                      <a href="javascript:void(null)">{{quickLinks.publicHostNameLabel}} &nbsp;</a>
-                      <ul class="dropdown-menu">
-                        {{#each quickLinks}}
-                          <li><a {{bindAttr href="url"}} target="_blank">{{label}}</a></li>
-                        {{/each}}
-                      </ul>
-                    </li>
-                  {{/each}}
-                {{else}}
-                  {{#if view.quickLinks}}
-                    {{#each view.quickLinks}}
-                      <li><a {{bindAttr href="url"}} target="_blank">{{label}}</a></li>
-                    {{/each}}
-                  {{else}}
-                    <div class="alert alert-danger"><small>{{t quick.links.error.quicklinks.unavailable.label}}</small></div>
-                  {{/if}}
-                {{/if}}
-              {{else}}
-                {{view App.SpinnerView}}
-              {{/if}}
-           </ul>
-          </li>
-        </ul>
-      {{/if}}
-    {{/view}}
-  </div>
 
 {{#isAuthorized "SERVICE.RUN_CUSTOM_COMMAND, SERVICE.RUN_SERVICE_CHECK, SERVICE.START_STOP, SERVICE.TOGGLE_MAINTENANCE, SERVICE.ENABLE_HA"}}
 <div class="service-button">
   {{#if view.isMaintenanceActive}}
     <div class="btn-group display-inline-block">
       <button class="btn btn-default dropdown-toggle" id="service-actions-dropdown-btn" data-toggle="dropdown" href="#">
-        {{t services.service.actions.serviceActions}}
+        {{t common.actions}}
         <span class="caret"></span>
       </button>
       <ul class="pull-right dropdown-menu">

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/templates/main/service/services/hbase.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/services/hbase.hbs b/ambari-web/app/templates/main/service/services/hbase.hbs
index 2d4f8bb..e5ee086 100644
--- a/ambari-web/app/templates/main/service/services/hbase.hbs
+++ b/ambari-web/app/templates/main/service/services/hbase.hbs
@@ -17,73 +17,83 @@
 }}
 
 <div class="row">
-  <div class="col-md-6">
-    {{! HBase Master Server }}
-    {{view view.dashboardMasterComponentView}}
-    {{! RegionServers }}
-    {{#if view.isRegionServerCreated}}
-      <div {{bindAttr class=":row :component view.regionServerComponent.componentName"}}>
-        <div class="col-md-6 summary-label">
-          <a href="#" {{action filterHosts view.regionServerComponent}}>{{t dashboard.services.hbase.regionServers}}</a>
+  <div class="col-md-12 component-summary">
+    <div class="col-md-2">{{t dashboard.services.hdfs.summary.components}}</div>
+    <div class="col-md-10">
+      {{! HBase Master Server }}
+      {{view view.dashboardMasterComponentView}}
+      {{! RegionServers }}
+      {{#if view.isRegionServerCreated}}
+        <div {{bindAttr class=":row :component :col-md-3 view.regionServerComponent.componentName"}}>
+          <div class="summary-value main-info">
+            {{#if App.router.clusterController.isServiceContentFullyLoaded}}
+              <span>
+                {{#view App.ComponentLiveTextView liveComponentsBinding="view.service.regionServersStarted" totalComponentsBinding="view.service.regionServersTotal"}}
+                  {{view.liveComponents}}/{{view.totalComponents}}
+                {{/view}}
+              </span>
+              {{t common.live}}
+            {{else}}
+              {{t common.loading.eclipses}}
+            {{/if}}
+          </div>
+          <div class="summary-label">
+            <a href="#" {{action filterHosts view.regionServerComponent}}>{{t dashboard.services.hbase.regionServers}}</a>
+          </div>
         </div>
-        <div class="col-md-6 summary-value">
-          {{#if App.router.clusterController.isServiceContentFullyLoaded}}
+      {{/if}}
+      {{! PhoenixServers }}
+      {{#if view.isPhoenixQueryServerCreated}}
+        <div {{bindAttr class=":row :component :col-md-3 view.phoenixServerComponent.componentName"}}>
+          <div class="summary-value main-info">
             <span>
-              {{#view App.ComponentLiveTextView liveComponentsBinding="view.service.regionServersStarted" totalComponentsBinding="view.service.regionServersTotal"}}
-                {{view.liveComponents}}/{{view.totalComponents}}
+              {{#view App.ComponentLiveTextView liveComponentsBinding="view.service.phoenixServersStarted" totalComponentsBinding="view.service.phoenixServersTotal"}}
+                {{#if App.router.clusterController.isServiceContentFullyLoaded}}
+                  {{view.liveComponents}}/{{view.totalComponents}}
+                {{/if}}
               {{/view}}
             </span>
-            {{t services.service.summary.RegionServersLIVE}}
-          {{else}}
-            {{t common.loading.eclipses}}
-          {{/if}}
+            {{t common.live}}
+          </div>
+          <div class="summary-label">
+            <a href="#" {{action filterHosts view.phoenixServerComponent}}>{{t dashboard.services.hbase.phoenixServers}}</a>
+          </div>
         </div>
+      {{/if}}
+      {{! Regions in Transition }}
+      <div class="row col-md-3 regions-in-trnasition">
+        <div class="summary-value main-info">{{view.service.regionsInTransition}}</div>
+        <div class="summary-label">{{t dashboard.services.hbase.regions.transition}}</div>
       </div>
-    {{/if}}
-    {{! PhoenixServers }}
-    {{#if view.isPhoenixQueryServerCreated}}
-      <div {{bindAttr class=":row :component view.phoenixServerComponent.componentName"}}>
-        <div class="col-md-6 summary-label">
-          <a href="#" {{action filterHosts view.phoenixServerComponent}}>{{t dashboard.services.hbase.phoenixServers}}</a>
-        </div>
-        <div class="col-md-6 summary-value">
-          <span>
-            {{#view App.ComponentLiveTextView liveComponentsBinding="view.service.phoenixServersStarted" totalComponentsBinding="view.service.phoenixServersTotal"}}
-              {{#if App.router.clusterController.isServiceContentFullyLoaded}}
-                {{view.liveComponents}}/{{view.totalComponents}}
-              {{/if}}
-            {{/view}}
-          </span>
-          {{t services.service.summary.PhoenixServersLIVE}}
-        </div>
-      </div>
-    {{/if}}
-    {{! Regions in Transition }}
-    <div class="row regions-in-trnasition">
-      <div class="col-md-6 summary-label">{{t dashboard.services.hbase.regions.transition}}</div>
-      <div class="col-md-6 summary-value">{{view.service.regionsInTransition}}</div>
     </div>
   </div>
-  <div class="col-md-6">
-    {{! HBase Master Started Time }}
-    <div class="row started-time">
-      <div class="col-md-6 summary-label">{{t dashboard.services.hbase.masterStarted}}</div>
-      <div class="col-md-6 summary-value">{{view.masterStartedTime}}</div>
-    </div>
-    {{! HBase Master Activated Time }}
-    <div class="row activated-time">
-      <div class="col-md-6 summary-label">{{t dashboard.services.hbase.masterActivated}}</div>
-      <div class="col-md-6 summary-value">{{view.masterStartedTime}}</div>
-    </div>
-    {{! Average Load }}
-    <div class="row average-load">
-      <div class="col-md-6 summary-label">{{t dashboard.services.hbase.averageLoad}}</div>
-      <div class="col-md-6 summary-value">{{view.averageLoad}}</div>
-    </div>
-    {{! Master Server Heap }}
-    <div class="row server-heap">
-      <div class="col-md-6 summary-label">{{t dashboard.services.hbase.masterServerHeap}}</div>
-      <div class="col-md-6 summary-value">{{view.masterServerHeapSummary}}</div>
+
+  <div class="col-md-12 metrics-summary">
+    <div class="col-md-2">{{t dashboard.services.hdfs.summary.service-metrics}}</div>
+    <div class="col-md-10">
+      {{! HBase Master Started Time }}
+      <div class="row col-md-3 started-time">
+        <div class="summary-value main-info">{{view.masterStartedTime}}</div>
+        <div class="summary-label">{{t dashboard.services.hbase.masterStarted}}</div>
+      </div>
+      {{! HBase Master Activated Time }}
+      <div class="row col-md-3 activated-time">
+        <div class="summary-value main-info">{{view.masterStartedTime}}</div>
+        <div class="summary-label">{{t dashboard.services.hbase.masterActivated}}</div>
+      </div>
+      {{! Average Load }}
+      <div class="row col-md-3 average-load">
+        <div class="summary-value main-info">{{view.averageLoad}}</div>
+        <div class="summary-label">{{t dashboard.services.hbase.averageLoad}}</div>
+      </div>
+      {{! Master Server Heap }}
+      <div class="row col-md-3 server-heap">
+        <div class="summary-value">
+          <div class="main-info">{{view.masterServerHeapSummaryPercent}}</div>
+          <div class="info-desc">{{view.masterServerHeapSummary}}</div>
+        </div>
+        <div class="summary-label">{{t dashboard.services.hbase.masterServerHeap}}</div>
+      </div>
     </div>
   </div>
 </div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/templates/main/service/services/hdfs.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/services/hdfs.hbs b/ambari-web/app/templates/main/service/services/hdfs.hbs
index 01bd762..967239d 100644
--- a/ambari-web/app/templates/main/service/services/hdfs.hbs
+++ b/ambari-web/app/templates/main/service/services/hdfs.hbs
@@ -17,140 +17,170 @@
 }}
 
 <div class="row">
-  {{! left column }}
-  <div class="col-md-6">
-    {{view view.dashboardMasterComponentView}}
-    {{! Data Nodes }}
-    {{#if view.isDataNodeCreated}}
-      <div {{bindAttr class=":row :component view.dataNodeComponent.componentName"}}>
-        <div class="col-md-6 summary-label">
-          <a href="#" {{action filterHosts view.dataNodeComponent}}>{{t dashboard.services.hdfs.datanodes}}</a>
-        </div>
-        <div class="col-md-6 summary-value">
-          {{#if App.router.clusterController.isServiceContentFullyLoaded}}
-            <span>
-              {{#view App.ComponentLiveTextView liveComponentsBinding="view.service.dataNodesStarted" totalComponentsBinding="view.service.dataNodesTotal"}}
-                {{view.liveComponents}}/{{view.totalComponents}}
-              {{/view}}
-            </span>
-            {{t common.started}}
-          {{else}}
-            {{t common.loading.eclipses}}
-          {{/if}}
-        </div>
+  {{! Component Section }}
+  <div class="col-md-12 component-summary">
+    <div class="col-md-2">{{t dashboard.services.hdfs.summary.components}}</div>
+    <div class="col-md-10">
+      {{view view.dashboardMasterComponentView}}
+      {{! NameNode Uptime }}
+      <div class="row namenode-uptime col-md-3">
+        <div class="summary-value main-info">{{view.nodeUptime}}</div>
+        <div class="summary-label">{{t dashboard.services.hdfs.nodes.uptime}}</div>
       </div>
-    {{/if}}
-    {{! Data Node Counts }}
-    <div class="row datanode-count">
-      <div class="col-md-6 summary-label">{{t dashboard.services.hdfs.datanodecounts}}</div>
-      <div class="col-md-6 summary-value">
-        {{#if view.service.metricsNotAvailable}}
-          {{t services.service.summary.notAvailable}}
-        {{else}}
-          <span {{translateAttr data-original-title="dashboard.services.hdfs.datanode.status.tooltip.live" }}
-            rel="tooltip">{{view.service.liveDataNodes.length}} {{t dashboard.services.hdfs.nodes.live}} </span> /
-        <span {{translateAttr data-original-title="dashboard.services.hdfs.datanode.status.tooltip.dead" }}
-          rel="tooltip">{{view.service.deadDataNodes.length}} {{t dashboard.services.hdfs.nodes.dead}} </span> /
-        <span {{translateAttr data-original-title="dashboard.services.hdfs.datanode.status.tooltip.decommission" }}
-          rel="tooltip">{{view.service.decommissionDataNodes.length}} {{t dashboard.services.hdfs.nodes.decom}}</span>
-        {{/if}}
+      {{! NameNode Heap }}
+      <div class="row namenode-heap col-md-3">
+        <div class="summary-value">
+          <div class="main-info"> {{view.nodeHeapPercent}} </div>
+          <div class="info-desc"> {{view.nodeHeap}} </div>
+        </div>
+        <div class="summary-label">{{t dashboard.services.hdfs.nodes.heap}}</div>
       </div>
-    </div>
-    {{! JournalNodes }}
-    {{#if view.isJournalNodeCreated}}
-      <div {{bindAttr class=":row :component view.journalNodeComponent.componentName"}}>
-        <div class="col-md-6 summary-label">
-          <a href="#" {{action filterHosts view.journalNodeComponent}}>{{t dashboard.services.hdfs.journalnodes}}</a>
+      {{! Data Nodes }}
+      {{#if view.isDataNodeCreated}}
+        <div {{bindAttr class=":row :component :col-md-3 view.dataNodeComponent.componentName"}}>
+          <div class="summary-value main-info">
+            {{#if App.router.clusterController.isServiceContentFullyLoaded}}
+              <span>
+                {{#view App.ComponentLiveTextView liveComponentsBinding="view.service.dataNodesStarted" totalComponentsBinding="view.service.dataNodesTotal"}}
+                  {{view.liveComponents}}/{{view.totalComponents}}
+                {{/view}}
+              </span>
+              {{t common.started}}
+            {{else}}
+              {{t common.loading.eclipses}}
+            {{/if}}
+          </div>
+          <div class="summary-label">
+            <a href="#" {{action filterHosts view.dataNodeComponent}}>{{t dashboard.services.hdfs.datanodes}}</a>
+          </div>
         </div>
-        <div class="col-md-6 summary-value">
-          {{#if App.router.clusterController.isComponentsStateLoaded}}
-            <span>
-              {{#view App.ComponentLiveTextView liveComponentsBinding="view.journalNodesLive" totalComponentsBinding="view.journalNodesTotal"}}
-                {{view.liveComponents}}/{{view.totalComponents}}
-              {{/view}}
-            </span>
-            {{t services.service.summary.JournalNodesLive}}
+      {{/if}}
+      {{! Data Node Counts }}
+      <div class="row datanode-count col-md-3">
+        <div class="summary-value">
+          {{#if view.service.metricsNotAvailable}}
+          <div class="main-info">
+            {{t services.service.summary.notAvailable}}
+            </div>
           {{else}}
-            {{t common.loading.eclipses}}
+            <div class="main-info">
+              <span {{translateAttr data-original-title="dashboard.services.hdfs.datanode.status.tooltip.live" }}
+                      rel="tooltip">{{view.service.liveDataNodes.length}} </span> /
+              <span {{translateAttr data-original-title="dashboard.services.hdfs.datanode.status.tooltip.dead" }}
+                      rel="tooltip">{{view.service.deadDataNodes.length}} </span> /
+              <span {{translateAttr data-original-title="dashboard.services.hdfs.datanode.status.tooltip.decommission" }}
+                      rel="tooltip">{{view.service.decommissionDataNodes.length}} </span>
+            </div>
+            <div class="info-desc">
+              <span {{t dashboard.services.hdfs.nodes.live}} </span> /
+              <span {{t dashboard.services.hdfs.nodes.dead}} </span> /
+              <span {{t dashboard.services.hdfs.nodes.decom}} </span>
+            </div>
           {{/if}}
         </div>
+        <div class="summary-label">{{t dashboard.services.hdfs.datanodecounts}}</div>
       </div>
-    {{/if}}
-    {{! NFS Gateway }}
-    {{#if view.isNfsInStack}}
-      <div {{bindAttr class=":row :component view.nfsGatewayComponent.componentName"}}>
-        <div class="col-md-6 summary-label">
-          <a href="#" {{action filterHosts view.nfsGatewayComponent}}>{{t dashboard.services.hdfs.nfsgateways}}</a>
+      {{! JournalNodes }}
+      {{#if view.isJournalNodeCreated}}
+        <div {{bindAttr class=":row :component :col-md-3 view.journalNodeComponent.componentName"}}>
+          <div class="summary-value main-info">
+            {{#if App.router.clusterController.isComponentsStateLoaded}}
+              <span>
+                {{#view App.ComponentLiveTextView liveComponentsBinding="view.journalNodesLive" totalComponentsBinding="view.journalNodesTotal"}}
+                  {{view.liveComponents}}/{{view.totalComponents}}
+                {{/view}}
+              </span>
+              <span> {{t common.live}} </span>
+            {{else}}
+              {{t common.loading.eclipses}}
+            {{/if}}
+          </div>
+          <div class="summary-label">
+            <a href="#" {{action filterHosts view.journalNodeComponent}}>{{t dashboard.services.hdfs.journalnodes}}</a>
+          </div>
         </div>
-        <div class="col-md-6 summary-value">
-          {{#if App.router.clusterController.isServiceContentFullyLoaded}}
-            <span>
-              {{#view App.ComponentLiveTextView liveComponentsBinding="view.service.nfsGatewaysStarted" totalComponentsBinding="view.service.nfsGatewaysTotal"}}
-                {{view.liveComponents}}/{{view.totalComponents}}
-              {{/view}}
-            </span>
-            {{t common.started}}
-          {{else}}
-            {{t common.loading.eclipses}}
-          {{/if}}
+      {{/if}}
+      {{! NFS Gateway }}
+      {{#if view.isNfsInStack}}
+        <div {{bindAttr class=":row :component :col-md-3 view.nfsGatewayComponent.componentName"}}>
+          <div class="summary-value main-info">
+            {{#if App.router.clusterController.isServiceContentFullyLoaded}}
+              <span>
+                {{#view App.ComponentLiveTextView liveComponentsBinding="view.service.nfsGatewaysStarted" totalComponentsBinding="view.service.nfsGatewaysTotal"}}
+                  {{view.liveComponents}}/{{view.totalComponents}}
+                {{/view}}
+              </span>
+              {{t common.started}}
+            {{else}}
+              {{t common.loading.eclipses}}
+            {{/if}}
+          </div>
+          <div class="summary-label">
+            <a href="#" {{action filterHosts view.nfsGatewayComponent}}>{{t dashboard.services.hdfs.nfsgateways}}</a>
+          </div>
         </div>
-      </div>
-    {{/if}}
-    {{! NameNode Uptime }}
-    <div class="row namenode-uptime">
-      <div class="col-md-6 summary-label">{{t dashboard.services.hdfs.nodes.uptime}}</div>
-      <div class="col-md-6 summary-value">{{view.nodeUptime}}</div>
-    </div>
-    {{! NameNode Heap }}
-    <div class="row namenode-heap">
-      <div class="col-md-6 summary-label">{{t dashboard.services.hdfs.nodes.heap}}</div>
-      <div class="col-md-6 summary-value">{{view.nodeHeap}}</div>
-    </div>
-    {{! HDFS Capacity (Disk Usage)}}
-    <div class="row dfs-usage">
-      <div class="col-md-6 summary-label">{{t dashboard.services.hdfs.capacity.dfsUsed}}</div>
-      <div class="col-md-6 summary-value">{{view.dfsUsedDisk}}</div>
-    </div>
-    <div class="row non-dfs-used">
-      <div class="col-md-6 summary-label">{{t dashboard.services.hdfs.capacity.nonDfsUsed}}</div>
-      <div class="col-md-6 summary-value">{{view.nonDfsUsedDisk}}</div>
+      {{/if}}
     </div>
   </div>
   {{! left column end }}
 
-  {{! right column }}
-  <div class="col-md-6">
-    <div class="row capacity-remaining">
-      <div class="col-md-6 summary-label">{{t dashboard.services.hdfs.capacity.remaining}}</div>
-      <div class="col-md-6 ">{{view.remainingDisk}}</div>
-    </div>
-    {{! Blocks Total }}
-    <div class="row blocks-total">
-      <div class="col-md-6 summary-label">{{t services.service.summary.blocksTotal}}</div>
-      <div class="col-md-6 ">{{view.dfsTotalBlocks}}</div>
-    </div>
-    {{! Block Errors }}
-    <div class="row block-errors">
-      <div class="col-md-6 summary-label">{{t services.service.summary.blockErrors}}</div>
-      <div class="col-md-6 ">{{view.blockErrorsMessage}}</div>
-    </div>
-    {{! Total Files And Directories }}
-    <div class="row total-files-dirs">
-      <div class="col-md-6 summary-label">{{t dashboard.services.hdfs.totalFilesAndDirs}}</div>
-      <div class="col-md-6 ">{{view.dfsTotalFiles}}</div>
-    </div>
-    {{! Upgrade Status }}
-    <div class="row upgrade-status">
-      <div class="col-md-6 summary-label">{{t services.service.summary.pendingUpgradeStatus}}</div>
-      <div class="col-md-6 ">
-        <span {{bindAttr class="view.isUpgradeStatusWarning:upgrade-status-warning"}}>{{view.upgradeStatus}}</span>
+  {{! Service Metrics Section }}
+  <div class="col-md-12 metrics-summary">
+    <div class="col-md-2">{{t dashboard.services.hdfs.summary.service-metrics}}</div>
+    <div class="col-md-10">
+      {{! HDFS Capacity (Disk Usage)}}
+      <div class="row dfs-usage col-md-3">
+        <div class="summary-value">
+          <div class="main-info">{{view.dfsUsedDiskPercent}}</div>
+          <div class="info-desc">{{view.dfsUsedDisk}}</div>
+        </div>
+        <div class="summary-label">{{t dashboard.services.hdfs.capacity.dfsUsed}}</div>
       </div>
-    </div>
-    {{! Safe Mode Status }}
-    <div class="row safe-mode-status">
-      <div class="col-md-6 summary-label">{{t services.service.summary.safeModeStatus}}</div>
-      <div class="col-md-6 ">
-        {{view.safeModeStatus}}
+      <div class="row non-dfs-used col-md-3">
+        <div class="summary-value main-info">
+          <div class="main-info">{{view.nonDfsUsedDiskPercent}}</div>
+          <div class="info-desc">{{view.nonDfsUsedDisk}}</div>
+        </div>
+        <div class="summary-label">{{t dashboard.services.hdfs.capacity.nonDfsUsed}}</div>
+      </div>
+      <div class="row capacity-remaining col-md-3">
+        <div class="summary-value">
+          <div class="main-info">{{view.remainingDiskPercent}}</div>
+          <div class="info-desc">{{view.remainingDisk}}</div>
+        </div>
+        <div class="summary-label">{{t dashboard.services.hdfs.capacity.remaining}}</div>
+      </div>
+      {{! Blocks Total }}
+      <div class="row blocks-total col-md-3">
+        <div class="summary-value main-info">{{view.dfsTotalBlocks}}</div>
+        <div class="summary-label">{{t services.service.summary.blocksTotal}}</div>
+      </div>
+      {{! Block Errors }}
+      <div class="row block-errors col-md-3">
+        <div class="summary-value">
+          <div class="main-info">{{view.blockErrorsMessage}}</div>
+          <div class="info-desc">{{t dashboard.services.hdfs.blockErrorsDesc}}</div>
+        </div>
+        <div class="summary-label">{{t services.service.summary.blockErrors}}</div>
+      </div>
+      {{! Total Files And Directories }}
+      <div class="row total-files-dirs col-md-3">
+        <div class="summary-value main-info">{{view.dfsTotalFiles}}</div>
+        <div class="summary-label">{{t dashboard.services.hdfs.totalFilesAndDirs}}</div>
+      </div>
+      {{! Upgrade Status }}
+      <div class="row upgrade-status col-md-3">
+        <div class="summary-value main-info">
+          <span {{bindAttr class="view.isUpgradeStatusWarning:upgrade-status-warning"}}>{{view.upgradeStatus}}</span>
+        </div>
+        <div class="summary-label">{{t services.service.summary.pendingUpgradeStatus}}</div>
+      </div>
+      {{! Safe Mode Status }}
+      <div class="row safe-mode-status col-md-3">
+        <div class="summary-value main-info">
+          {{view.safeModeStatus}}
+        </div>
+        <div class="summary-label">{{t services.service.summary.safeModeStatus}}</div>
       </div>
     </div>
   </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/templates/main/service/services/hive.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/services/hive.hbs b/ambari-web/app/templates/main/service/services/hive.hbs
index 9c8b914..5dad326 100644
--- a/ambari-web/app/templates/main/service/services/hive.hbs
+++ b/ambari-web/app/templates/main/service/services/hive.hbs
@@ -17,15 +17,18 @@
 }}
 
 <div class="row">
-  <div class="col-md-6">
-    {{view App.SummaryMasterComponentsView mastersCompBinding="view.parentView.mastersObj"}}
-    {{view App.SummaryClientComponentsView clientsObjBinding="view.parentView.clientObj"}}
+  <div class="col-md-12 component-summary">
+    <div class="col-md-2">{{t dashboard.services.hdfs.summary.components}}</div>
+    <div class="col-md-10">
+      {{view App.SummaryMasterComponentsView mastersCompBinding="view.parentView.mastersObj"}}
+      {{view App.SummaryClientComponentsView clientsObjBinding="view.parentView.clientObj"}}
+    </div>
   </div>
 </div>
 {{#each endpoint in hiveServerEndPoints}}
   {{#if endpoint.isVisible}}
     <div {{bindAttr class=":row :component endpoint.componentName"}}>
-      <div class="col-md-3 col-lg-3 summary-label">{{endpoint.label}}</div>
+      <div class="col-md-2 col-lg-3 summary-label" style="margin-top: 0px;">{{endpoint.label}}</div>
       <div class="col-md-9 col-lg-9 summary-value">
         {{#view view.summaryValueView titleBinding="endpoint.tooltipText" data-toggle="tooltip"}}
           {{endpoint.value}}
@@ -42,7 +45,7 @@
   <div class="col-md-6">
     {{#each link in view.viewLinks}}
       <div class="row">
-        <div class="col-md-6 summary-label">{{link.label}}</div>
+        <div class="col-md-6 summary-label" style="margin-top: 0px;">{{link.label}}</div>
         <div class="col-md-6 summary-value">
           <a href="#" target="_blank" {{action goToView link.viewInstance target="controller"}}>{{t app.goToView}}</a>
         </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/templates/main/service/services/ranger.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/services/ranger.hbs b/ambari-web/app/templates/main/service/services/ranger.hbs
index f322498..9094de0 100644
--- a/ambari-web/app/templates/main/service/services/ranger.hbs
+++ b/ambari-web/app/templates/main/service/services/ranger.hbs
@@ -17,36 +17,39 @@
 }}
 
 <div class="row">
-  <div class="col-md-6">
-    {{view view.dashboardMasterComponentView}}
+  <div class="col-md-12 component-summary">
+    <div class="col-md-2">{{t dashboard.services.hdfs.summary.components}}</div>
+    <div class="col-md-10">
+      {{view view.dashboardMasterComponentView}}
 
-    {{! Ranger Tagsyncs }}
-    {{#if view.isRangerTagsyncCreated}}
-      <div {{bindAttr class=":row :component view.rangerTagsyncComponent.componentName"}}>
-        <div class="col-md-6 summary-label">
-          <a href="#" {{action filterHosts view.rangerTagsyncComponent}}>{{t dashboard.services.ranger.rangerTagsyncs}}</a>
-        </div>
-        <div class="col-md-6 summary-value">
-          {{#if App.router.clusterController.isServiceContentFullyLoaded}}
-            <span>
-              {{#view App.ComponentLiveTextView liveComponentsBinding="view.service.rangerTagsyncsStarted" totalComponentsBinding="view.service.rangerTagsyncsTotal"}}
-                {{view.liveComponents}}/{{view.totalComponents}}
-              {{/view}}
-            </span>{{t common.started}}
-          {{else}}
-            {{t common.loading.eclipses}}
-          {{/if}}
-        </div>
-      </div>
-    {{/if}}
-
-    {{#each item in controller.rangerPlugins}}
-      {{#if item.isDisplayed}}
-        <div class="row ranger-plugin">
-          <div class="col-md-6 summary-label">{{item.pluginTitle}}</div>
-          <div class="col-md-6 summary-value">{{item.status}}</div>
+      {{! Ranger Tagsyncs }}
+      {{#if view.isRangerTagsyncCreated}}
+        <div {{bindAttr class=":row :component :col-md-3 view.rangerTagsyncComponent.componentName"}}>
+          <div class="summary-value main-info">
+            {{#if App.router.clusterController.isServiceContentFullyLoaded}}
+              <span>
+                {{#view App.ComponentLiveTextView liveComponentsBinding="view.service.rangerTagsyncsStarted" totalComponentsBinding="view.service.rangerTagsyncsTotal"}}
+                  {{view.liveComponents}}/{{view.totalComponents}}
+                {{/view}}
+              </span>{{t common.started}}
+            {{else}}
+              {{t common.loading.eclipses}}
+            {{/if}}
+          </div>
+          <div class="summary-label">
+            <a href="#" {{action filterHosts view.rangerTagsyncComponent}}>{{t dashboard.services.ranger.rangerTagsyncs}}</a>
+          </div>
         </div>
       {{/if}}
-    {{/each}}
+
+      {{#each item in controller.rangerPlugins}}
+        {{#if item.isDisplayed}}
+          <div class="row ranger-plugin col-md-3">
+            <div class="summary-value main-info">{{item.status}}</div>
+            <div class="summary-label">{{item.pluginTitle}}</div>
+          </div>
+        {{/if}}
+      {{/each}}
+    </div>
   </div>
 </div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/6305fb6a/ambari-web/app/templates/main/service/services/storm.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/services/storm.hbs b/ambari-web/app/templates/main/service/services/storm.hbs
index 68e60eb..dda4075 100644
--- a/ambari-web/app/templates/main/service/services/storm.hbs
+++ b/ambari-web/app/templates/main/service/services/storm.hbs
@@ -17,68 +17,74 @@
 }}
 
 <div class="row">
-  <div class="col-md-6">
-    {{view App.SummaryMasterComponentsView mastersCompBinding="view.parentView.mastersObj"}}
-    {{#if view.isSupervisorCreated}}
-      <div class="row component SUPERVISOR">
-        <div class="col-md-6 summary-label">
-          <a href="#" {{action filterHosts view.filterComponent}}>
-            {{t dashboard.services.storm.supervisors}}
-          </a>
+  <div class="col-md-12 component-summary">
+    <div class="col-md-2">{{t dashboard.services.hdfs.summary.components}}</div>
+    <div class="col-md-10">
+      {{view App.SummaryMasterComponentsView mastersCompBinding="view.parentView.mastersObj"}}
+      {{#if view.isSupervisorCreated}}
+        <div class="row col-md-3 component SUPERVISOR">
+          <div class="summary-value main-info">
+            {{#if App.router.clusterController.isServiceContentFullyLoaded}}
+              {{#view App.ComponentLiveTextView liveComponentsBinding="view.superVisorsLive" totalComponentsBinding="view.superVisorsTotal" tagName="span"}}
+                {{view.liveComponents}}/{{view.totalComponents}}
+              {{/view}}
+              {{t common.live}}
+            {{else}}
+              {{t common.loading.eclipses}}
+            {{/if}}
+          </div>
+          <div class="summary-label">
+            <a href="#" {{action filterHosts view.filterComponent}}>
+              {{t dashboard.services.storm.supervisors}}
+            </a>
+          </div>
         </div>
-        <div class="col-md-6 summary-value">
-          {{#if App.router.clusterController.isServiceContentFullyLoaded}}
-            {{#view App.ComponentLiveTextView liveComponentsBinding="view.superVisorsLive" totalComponentsBinding="view.superVisorsTotal" tagName="span"}}
-              {{view.liveComponents}}/{{view.totalComponents}}
-            {{/view}}
-            {{t services.service.summary.SupervisorsLIVE}}
-          {{else}}
-            {{t common.loading.eclipses}}
-          {{/if}}
-        </div>
-      </div>
-    {{/if}}
-  </div>
-  <div class="col-md-6">
-    <div class="row storm-slots">
-      <div class="col-md-6 summary-label">
-        {{t services.service.summary.storm.freeslots}}
-      </div>
-      <div class="col-md-6 summary-value">
-        {{formatNull view.service.freeSlots}} / {{formatNull view.service.totalSlots}}
-        ({{formatNull view.freeSlotsPercentage empty="0"}}% {{t common.free}})
-      </div>
+      {{/if}}
     </div>
-    <div class="row storm-tasks">
-      <div class="col-md-6 summary-label">
-        {{t services.service.summary.storm.tasks}}
-      </div>
-      <div class="col-md-6 summary-value">
-        {{formatNull view.service.totalTasks}}
-      </div>
-    </div>
-    <div class="row storm-executors">
-      <div class="col-md-6 summary-label">
-        {{t services.service.summary.storm.executors}}
-      </div>
-      <div class="col-md-6 summary-value">
-        {{formatNull view.service.totalExecutors}}
+  </div>
+  <div class="col-md-12 metrics-summary">
+    <div class="col-md-2">{{t dashboard.services.hdfs.summary.service-metrics}}</div>
+    <div class="col-md-10">
+      <div class="row col-md-3 storm-slots">
+        <div class="summary-value main-info">
+          {{formatNull view.service.freeSlots}} / {{formatNull view.service.totalSlots}}
+          ({{formatNull view.freeSlotsPercentage empty="0"}}% {{t common.free}})
+        </div>
+        <div class="summary-label">
+          {{t services.service.summary.storm.freeslots}}
+        </div>
       </div>
-    </div>
-    <div class="row storm-topologies">
-      <div class="col-md-6 summary-label">
-        {{t services.service.summary.storm.topologies}}
+      <div class="row col-md-3 storm-tasks">
+        <div class="summary-value main-info">
+          {{formatNull view.service.totalTasks}}
+        </div>
+        <div class="summary-label">
+          {{t services.service.summary.storm.tasks}}
+        </div>
       </div>
-      <div class="col-md-6 summary-value">
-        {{formatNull view.service.topologies}}
+      <div class="row col-md-3 storm-executors">
+        <div class="summary-value main-info">
+          {{formatNull view.service.totalExecutors}}
+        </div>
+        <div class="summary-label">
+          {{t services.service.summary.storm.executors}}
+        </div>
       </div>
-    </div>
-    <div class="row nimbus-uptime">
-      <div class="col-md-6 summary-label">
-        {{t services.service.summary.storm.nimbus.uptime}}
+      <div class="row col-md-3 storm-topologies">
+        <div class="summary-value main-info">
+          {{formatNull view.service.topologies}}
+        </div>
+        <div class="summary-label">
+          {{t services.service.summary.storm.topologies}}
+        </div>
       </div>
-      <div class="col-md-6 summary-value">
-        {{view.nimbusUptimeFormatted}}
+      <div class="row col-md-3 nimbus-uptime">
+        <div class="summary-value main-info">
+          {{view.nimbusUptimeFormatted}}
+        </div>
+        <div class="summary-label">
+          {{t services.service.summary.storm.nimbus.uptime}}
+        </div>
       </div>
     </div>
   </div>


[05/42] ambari git commit: AMBARI-21291 Schema error during upgrade related to request table (dgrinenko)

Posted by rl...@apache.org.
AMBARI-21291 Schema error during upgrade related to request table (dgrinenko)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/8f06a5b0
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/8f06a5b0
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/8f06a5b0

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 8f06a5b01719b825e8bcee2a2a56545a1c3052a9
Parents: 6fe7cc2
Author: Dmytro Grinenko <ha...@apache.org>
Authored: Fri Jun 23 08:13:54 2017 +0300
Committer: Dmytro Grinenko <ha...@apache.org>
Committed: Fri Jun 23 08:13:54 2017 +0300

----------------------------------------------------------------------
 .../apache/ambari/server/orm/DBAccessor.java    |  41 ++++++-
 .../ambari/server/orm/DBAccessorImpl.java       | 113 ++++++++++++++++---
 .../server/orm/helpers/dbms/DbmsHelper.java     |  10 ++
 .../orm/helpers/dbms/GenericDbmsHelper.java     |  12 ++
 .../server/orm/helpers/dbms/H2Helper.java       |  10 ++
 .../server/upgrade/UpgradeCatalog251.java       |   3 +-
 .../ambari/server/orm/DBAccessorImplTest.java   |  62 ++++++++++
 7 files changed, 232 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/8f06a5b0/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java
index 4f29d61..4ddaf26 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java
@@ -323,6 +323,40 @@ public interface DBAccessor {
   void executeQuery(String query, boolean ignoreFailure) throws SQLException;
 
   /**
+   * Execute prepared statements
+   * @param query query to execute
+   * @param arguments list of arguments for prepared statement
+   * @throws SQLException
+   */
+  void executePreparedQuery(String query, Object...arguments) throws SQLException;
+
+  /**
+   * Execute prepared update statements
+   * @param query query to execute
+   * @param ignoreFailure determines if exceptions during query execution should be ignored
+   * @param arguments list of arguments for prepared statement
+   * @throws SQLException
+   */
+  void executePreparedQuery(String query, boolean ignoreFailure, Object...arguments) throws SQLException;
+
+  /**
+   * Execute prepared update statements
+   * @param query query to execute
+   * @param arguments list of arguments for prepared statement
+   * @throws SQLException
+   */
+  void executePreparedUpdate(String query, Object...arguments) throws SQLException;
+
+  /**
+   * Execute prepared statements which will not ignore failures
+   * @param query
+   * @param ignoreFailure
+   * @param arguments
+   * @throws SQLException
+   */
+  void executePreparedUpdate(String query, boolean ignoreFailure, Object...arguments) throws SQLException;
+
+  /**
    * Drop table from schema
    * @param tableName
    * @throws SQLException
@@ -638,13 +672,12 @@ public interface DBAccessor {
    *          the target column name
    * @param targetIDFieldName
    *          the target id key name matched with {@code sourceIDFieldName}
-   * @param isColumnNullable
-   *          should be target column nullable or not
-   *
+   * @param initialValue
+   *          initial value for null-contained cells
    * @throws SQLException
    */
   void moveColumnToAnotherTable(String sourceTableName, DBColumnInfo sourceColumn, String sourceIDFieldName,
-       String targetTableName, DBColumnInfo targetColumn, String targetIDFieldName, boolean isColumnNullable) throws SQLException;
+       String targetTableName, DBColumnInfo targetColumn, String targetIDFieldName, Object initialValue) throws SQLException;
 
   enum DbType {
     ORACLE,

http://git-wip-us.apache.org/repos/asf/ambari/blob/8f06a5b0/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java
index 9077362..13e7d7d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java
@@ -18,6 +18,7 @@
 package org.apache.ambari.server.orm;
 
 import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
@@ -26,6 +27,7 @@ import java.sql.Blob;
 import java.sql.Connection;
 import java.sql.DatabaseMetaData;
 import java.sql.DriverManager;
+import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
@@ -614,7 +616,7 @@ public class DBAccessorImpl implements DBAccessor {
       case POSTGRES:
       case SQL_ANYWHERE:
       case SQL_SERVER:
-      default: {
+      default: {  // ToDo: getAddColumnStatement not supporting default clause for binary fields
         String query = dbmsHelper.getAddColumnStatement(tableName, columnInfo);
         executeQuery(query);
         break;
@@ -862,6 +864,86 @@ public class DBAccessorImpl implements DBAccessor {
     }
   }
 
+  /**
+   {@inheritDoc}
+   */
+  public void executePreparedQuery(String query, Object...arguments) throws SQLException {
+    executePreparedQuery(query, false, arguments);
+  }
+
+  /**
+   {@inheritDoc}
+   */
+  public void executePreparedQuery(String query, boolean ignoreFailure, Object...arguments) throws SQLException{
+    LOG.info("Executing prepared query: {}", query);
+
+    PreparedStatement preparedStatement = getConnection().prepareStatement(query);
+
+      for (int i = 0; i < arguments.length; i++) {
+        if (arguments[i] instanceof byte[]) {
+          byte[] binaryData = (byte[]) arguments[i];
+          // JDBC drivers supports only this function signature
+          preparedStatement.setBinaryStream(i+1, new ByteArrayInputStream(binaryData), binaryData.length);
+        } else {
+          preparedStatement.setObject(i+1, arguments[i]);
+        }
+      }
+    try {
+        preparedStatement.execute();
+    } catch (SQLException e) {
+        if (!ignoreFailure){
+          LOG.error("Error executing prepared query: {}", query, e);
+          throw e;
+        } else {
+          LOG.warn("Error executing prepared query: {}, errorCode={}, message = {}", query, e.getErrorCode(), e.getMessage());
+        }
+    } finally {
+        if (preparedStatement != null) {
+          preparedStatement.close();
+        }
+    }
+  }
+
+  /**
+   {@inheritDoc}
+   */
+  public void executePreparedUpdate(String query, Object...arguments) throws SQLException {
+    executePreparedQuery(query, false, arguments);
+  }
+
+  /**
+   {@inheritDoc}
+   */
+  public void executePreparedUpdate(String query, boolean ignoreFailure, Object...arguments) throws SQLException{
+    LOG.info("Executing prepared query: {}", query);
+
+    PreparedStatement preparedStatement = getConnection().prepareStatement(query);
+
+    for (int i = 0; i <= arguments.length; i++) {
+      if (arguments[i] instanceof byte[]) {
+        byte[] binaryData = (byte[]) arguments[i];
+        // JDBC drivers supports only this function signature
+        preparedStatement.setBinaryStream(i+1, new ByteArrayInputStream(binaryData), binaryData.length);
+      } else {
+        preparedStatement.setObject(i+1, arguments[i]);
+      }
+    }
+    try {
+      preparedStatement.executeUpdate();
+    } catch (SQLException e) {
+      if (!ignoreFailure){
+        LOG.error("Error executing prepared query: {}", query, e);
+        throw e;
+      } else {
+        LOG.warn("Error executing prepared query: {}, errorCode={}, message = {}", query, e.getErrorCode(), e.getMessage());
+      }
+    } finally {
+      if (preparedStatement != null) {
+        preparedStatement.close();
+      }
+    }
+  }
+
   @Override
   public void dropTable(String tableName) throws SQLException {
     String query = dbmsHelper.getDropTableStatement(tableName);
@@ -1321,31 +1403,36 @@ public class DBAccessorImpl implements DBAccessor {
    *          the target column name
    * @param targetIDFieldName
    *          the target id key name matched with {@code sourceIDFieldName}
-   * @param isColumnNullable
-   *          should be target column nullable or not
-   *
+   * @param initialValue
+   *          initial value for null-contained cells
    * @throws SQLException
    */
   @Override
   public void moveColumnToAnotherTable(String sourceTableName, DBColumnInfo sourceColumn, String sourceIDFieldName,
-              String targetTableName, DBColumnInfo targetColumn, String targetIDFieldName,  boolean isColumnNullable) throws SQLException {
+              String targetTableName, DBColumnInfo targetColumn, String targetIDFieldName, Object initialValue) throws SQLException {
 
     if (this.tableHasColumn(sourceTableName, sourceIDFieldName)) {
 
       final String moveSQL = dbmsHelper.getCopyColumnToAnotherTableStatement(sourceTableName, sourceColumn.getName(),
         sourceIDFieldName, targetTableName, targetColumn.getName(),targetIDFieldName);
+      final boolean isTargetColumnNullable = targetColumn.isNullable();
+
+      targetColumn.setNullable(true);  // setting column nullable by default to move rows with null
 
-      targetColumn.setNullable(true);  // setting column nullable by default
+      addColumn(targetTableName, targetColumn);
+      executeUpdate(moveSQL, false);
 
-      this.addColumn(targetTableName, targetColumn);
-      this.executeUpdate(moveSQL, false);
+      if (initialValue != null) {
+        String updateSQL = dbmsHelper.getColumnUpdateStatementWhereColumnIsNull(convertObjectName(targetTableName),
+          convertObjectName(targetColumn.getName()), convertObjectName(targetColumn.getName()));
+
+        executePreparedUpdate(updateSQL, initialValue);
+      }
 
-      if (!isColumnNullable) {
-        // this can will trigger exception if some record is null
-        // ToDo: add default option
-        this.setColumnNullable(targetTableName, targetColumn.getName(), false);
+      if (!isTargetColumnNullable) {
+        setColumnNullable(targetTableName, targetColumn.getName(), false);
       }
-      this.dropColumn(sourceTableName, sourceColumn.getName());
+      dropColumn(sourceTableName, sourceColumn.getName());
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/8f06a5b0/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/DbmsHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/DbmsHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/DbmsHelper.java
index 7f74bb0..b30d01b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/DbmsHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/DbmsHelper.java
@@ -62,6 +62,16 @@ public interface DbmsHelper {
                                  String... columnNames);
 
   /**
+   * Generating update SQL statement for {@link DBAccessor#executePreparedUpdate}
+   *
+   * @param tableName name of the table
+   * @param setColumnName column name, value of which need to be set
+   * @param conditionColumnName column name for the condition
+   * @return
+   */
+  String getColumnUpdateStatementWhereColumnIsNull(String tableName, String setColumnName, String conditionColumnName);
+
+  /**
    * Gets DROP INDEX statement
    *
    * @param indexName

http://git-wip-us.apache.org/repos/asf/ambari/blob/8f06a5b0/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/GenericDbmsHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/GenericDbmsHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/GenericDbmsHelper.java
index afa4ac7..56274c5 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/GenericDbmsHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/GenericDbmsHelper.java
@@ -270,6 +270,18 @@ public class GenericDbmsHelper implements DbmsHelper {
     return createIndex;
   }
 
+  /**
+   * Generating update SQL statement for {@link DBAccessor#executePreparedUpdate}
+   *
+   * @param tableName name of the table
+   * @param setColumnName column name, value of which need to be set
+   * @param conditionColumnName column name for the condition
+   * @return
+   */
+  @Override
+  public String getColumnUpdateStatementWhereColumnIsNull(String tableName, String setColumnName, String conditionColumnName){
+    return "UPDATE " + tableName + " SET " + setColumnName + "=? WHERE " + conditionColumnName + " IS NULL;";
+  }
 
   /**
    * {@inheritDoc}

http://git-wip-us.apache.org/repos/asf/ambari/blob/8f06a5b0/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/H2Helper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/H2Helper.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/H2Helper.java
index 4336624..91905e4 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/H2Helper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/H2Helper.java
@@ -71,4 +71,14 @@ public class H2Helper extends GenericDbmsHelper {
       .append(" WHERE C.TABLEID = T.TABLEID AND T.TABLENAME = '").append(tableName).append("'");
     return statement.toString();
   }
+
+  /**
+   {@inheritDoc}
+   */
+  @Override
+  public String getCopyColumnToAnotherTableStatement(String sourceTable, String sourceColumnName,
+                                                     String sourceIDColumnName, String targetTable, String targetColumnName, String targetIDColumnName) {
+    return String.format("UPDATE %1$s a SET %3$s = (SELECT b.%4$s FROM %2$s b WHERE b.%6$s = a.%5$s LIMIT 1)",
+      targetTable, sourceTable, targetColumnName, sourceColumnName, targetIDColumnName, sourceIDColumnName);
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/8f06a5b0/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog251.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog251.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog251.java
index 119d9ce..07c7d3e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog251.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog251.java
@@ -166,8 +166,7 @@ public class UpgradeCatalog251 extends AbstractUpgradeCatalog {
     DBColumnInfo sourceColumn = new DBColumnInfo(CLUSTER_HOST_INFO_COLUMN, byte[].class, null, null, false);
     DBColumnInfo targetColumn = new DBColumnInfo(CLUSTER_HOST_INFO_COLUMN, byte[].class, null, null, false);
 
-    dbAccessor.moveColumnToAnotherTable(STAGE_TABLE, sourceColumn, REQUEST_ID_COLUMN, REQUEST_TABLE, targetColumn,
-      REQUEST_ID_COLUMN, false);
+    dbAccessor.moveColumnToAnotherTable(STAGE_TABLE, sourceColumn, REQUEST_ID_COLUMN, REQUEST_TABLE, targetColumn, REQUEST_ID_COLUMN, "{}".getBytes());
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/8f06a5b0/ambari-server/src/test/java/org/apache/ambari/server/orm/DBAccessorImplTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/DBAccessorImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/DBAccessorImplTest.java
index 9aaa80f..19763c4 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/DBAccessorImplTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/DBAccessorImplTest.java
@@ -19,6 +19,8 @@
 package org.apache.ambari.server.orm;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.matchers.JUnitMatchers.containsString;
 
 import java.io.ByteArrayInputStream;
@@ -32,6 +34,7 @@ import java.sql.SQLException;
 import java.sql.Statement;
 import java.sql.Types;
 import java.util.ArrayList;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Vector;
@@ -90,6 +93,18 @@ public class DBAccessorImplTest {
     dbAccessor.createTable(tableName, columns, "id");
   }
 
+  private void createMyTable(String tableName, String...columnNames) throws Exception {
+    DBAccessorImpl dbAccessor = injector.getInstance(DBAccessorImpl.class);
+
+    List<DBColumnInfo> columns = new ArrayList<>();
+    columns.add(new DBColumnInfo("id", Long.class, null, null, false));
+    for (String column: columnNames){
+      columns.add(new DBColumnInfo(column, String.class, 20000, null, true));
+    }
+
+    dbAccessor.createTable(tableName, columns, "id");
+  }
+
   @Test
   public void testDbType() throws Exception {
     DBAccessorImpl dbAccessor = injector.getInstance(DBAccessorImpl.class);
@@ -577,4 +592,51 @@ public class DBAccessorImplTest {
 
     assertEquals("'foo'", columnDefaultVal);
    }
+
+  @Test
+  public void testMoveColumnToAnotherTable() throws Exception {
+    DBAccessorImpl dbAccessor = injector.getInstance(DBAccessorImpl.class);
+    String sourceTableName = getFreeTableName();
+    String targetTableName = getFreeTableName();
+    int testRowAmount = 10;
+
+    createMyTable(sourceTableName, "col1", "col2");
+    createMyTable(targetTableName, "col1");
+
+    for (Integer i=0; i < testRowAmount; i++){
+      dbAccessor.insertRow(sourceTableName,
+        new String[] {"id", "col1", "col2"},
+        new String[]{i.toString(), String.format("'source,1,%s'", i), String.format("'source,2,%s'", i)}, false);
+
+      dbAccessor.insertRow(targetTableName,
+        new String[] {"id", "col1"},
+        new String[]{i.toString(), String.format("'target,1,%s'", i)}, false);
+    }
+
+    DBColumnInfo sourceColumn = new DBColumnInfo("col2", String.class, null, null, false);
+    DBColumnInfo targetColumn = new DBColumnInfo("col2", String.class, null, null, false);
+
+    dbAccessor.moveColumnToAnotherTable(sourceTableName, sourceColumn, "id",
+      targetTableName, targetColumn, "id", "initial");
+
+    Statement statement = dbAccessor.getConnection().createStatement();
+    ResultSet resultSet =  statement.executeQuery("SELECT col2 FROM " + targetTableName + " ORDER BY col2");
+
+    assertNotNull(resultSet);
+
+    List<String> response = new LinkedList<>();
+
+    while (resultSet.next()){
+      response.add(resultSet.getString(1));
+    }
+
+    assertEquals(testRowAmount, response.toArray().length);
+
+    int i = 0;
+    for(String row: response){
+      assertEquals(String.format("source,2,%s", i), row);
+      i++;
+    }
+
+   }
 }


[17/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.js b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.js
deleted file mode 100755
index ebc6c18..0000000
--- a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/jquery.js
+++ /dev/null
@@ -1,8829 +0,0 @@
-/*!
- * jQuery JavaScript Library v2.0.3
- * http://jquery.com/
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- *
- * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2013-07-03T13:30Z
- */
-(function( window, undefined ) {
-
-// Can't do this because several apps including ASP.NET trace
-// the stack via arguments.caller.callee and Firefox dies if
-// you try to trace through "use strict" call chains. (#13335)
-// Support: Firefox 18+
-//"use strict";
-var
-	// A central reference to the root jQuery(document)
-	rootjQuery,
-
-	// The deferred used on DOM ready
-	readyList,
-
-	// Support: IE9
-	// For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`
-	core_strundefined = typeof undefined,
-
-	// Use the correct document accordingly with window argument (sandbox)
-	location = window.location,
-	document = window.document,
-	docElem = document.documentElement,
-
-	// Map over jQuery in case of overwrite
-	_jQuery = window.jQuery,
-
-	// Map over the $ in case of overwrite
-	_$ = window.$,
-
-	// [[Class]] -> type pairs
-	class2type = {},
-
-	// List of deleted data cache ids, so we can reuse them
-	core_deletedIds = [],
-
-	core_version = "2.0.3",
-
-	// Save a reference to some core methods
-	core_concat = core_deletedIds.concat,
-	core_push = core_deletedIds.push,
-	core_slice = core_deletedIds.slice,
-	core_indexOf = core_deletedIds.indexOf,
-	core_toString = class2type.toString,
-	core_hasOwn = class2type.hasOwnProperty,
-	core_trim = core_version.trim,
-
-	// Define a local copy of jQuery
-	jQuery = function( selector, context ) {
-		// The jQuery object is actually just the init constructor 'enhanced'
-		return new jQuery.fn.init( selector, context, rootjQuery );
-	},
-
-	// Used for matching numbers
-	core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
-
-	// Used for splitting on whitespace
-	core_rnotwhite = /\S+/g,
-
-	// A simple way to check for HTML strings
-	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
-	// Strict HTML recognition (#11290: must start with <)
-	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
-
-	// Match a standalone tag
-	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
-
-	// Matches dashed string for camelizing
-	rmsPrefix = /^-ms-/,
-	rdashAlpha = /-([\da-z])/gi,
-
-	// Used by jQuery.camelCase as callback to replace()
-	fcamelCase = function( all, letter ) {
-		return letter.toUpperCase();
-	},
-
-	// The ready event handler and self cleanup method
-	completed = function() {
-		document.removeEventListener( "DOMContentLoaded", completed, false );
-		window.removeEventListener( "load", completed, false );
-		jQuery.ready();
-	};
-
-jQuery.fn = jQuery.prototype = {
-	// The current version of jQuery being used
-	jquery: core_version,
-
-	constructor: jQuery,
-	init: function( selector, context, rootjQuery ) {
-		var match, elem;
-
-		// HANDLE: $(""), $(null), $(undefined), $(false)
-		if ( !selector ) {
-			return this;
-		}
-
-		// Handle HTML strings
-		if ( typeof selector === "string" ) {
-			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
-				// Assume that strings that start and end with <> are HTML and skip the regex check
-				match = [ null, selector, null ];
-
-			} else {
-				match = rquickExpr.exec( selector );
-			}
-
-			// Match html or make sure no context is specified for #id
-			if ( match && (match[1] || !context) ) {
-
-				// HANDLE: $(html) -> $(array)
-				if ( match[1] ) {
-					context = context instanceof jQuery ? context[0] : context;
-
-					// scripts is true for back-compat
-					jQuery.merge( this, jQuery.parseHTML(
-						match[1],
-						context && context.nodeType ? context.ownerDocument || context : document,
-						true
-					) );
-
-					// HANDLE: $(html, props)
-					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
-						for ( match in context ) {
-							// Properties of context are called as methods if possible
-							if ( jQuery.isFunction( this[ match ] ) ) {
-								this[ match ]( context[ match ] );
-
-							// ...and otherwise set as attributes
-							} else {
-								this.attr( match, context[ match ] );
-							}
-						}
-					}
-
-					return this;
-
-				// HANDLE: $(#id)
-				} else {
-					elem = document.getElementById( match[2] );
-
-					// Check parentNode to catch when Blackberry 4.6 returns
-					// nodes that are no longer in the document #6963
-					if ( elem && elem.parentNode ) {
-						// Inject the element directly into the jQuery object
-						this.length = 1;
-						this[0] = elem;
-					}
-
-					this.context = document;
-					this.selector = selector;
-					return this;
-				}
-
-			// HANDLE: $(expr, $(...))
-			} else if ( !context || context.jquery ) {
-				return ( context || rootjQuery ).find( selector );
-
-			// HANDLE: $(expr, context)
-			// (which is just equivalent to: $(context).find(expr)
-			} else {
-				return this.constructor( context ).find( selector );
-			}
-
-		// HANDLE: $(DOMElement)
-		} else if ( selector.nodeType ) {
-			this.context = this[0] = selector;
-			this.length = 1;
-			return this;
-
-		// HANDLE: $(function)
-		// Shortcut for document ready
-		} else if ( jQuery.isFunction( selector ) ) {
-			return rootjQuery.ready( selector );
-		}
-
-		if ( selector.selector !== undefined ) {
-			this.selector = selector.selector;
-			this.context = selector.context;
-		}
-
-		return jQuery.makeArray( selector, this );
-	},
-
-	// Start with an empty selector
-	selector: "",
-
-	// The default length of a jQuery object is 0
-	length: 0,
-
-	toArray: function() {
-		return core_slice.call( this );
-	},
-
-	// Get the Nth element in the matched element set OR
-	// Get the whole matched element set as a clean array
-	get: function( num ) {
-		return num == null ?
-
-			// Return a 'clean' array
-			this.toArray() :
-
-			// Return just the object
-			( num < 0 ? this[ this.length + num ] : this[ num ] );
-	},
-
-	// Take an array of elements and push it onto the stack
-	// (returning the new matched element set)
-	pushStack: function( elems ) {
-
-		// Build a new jQuery matched element set
-		var ret = jQuery.merge( this.constructor(), elems );
-
-		// Add the old object onto the stack (as a reference)
-		ret.prevObject = this;
-		ret.context = this.context;
-
-		// Return the newly-formed element set
-		return ret;
-	},
-
-	// Execute a callback for every element in the matched set.
-	// (You can seed the arguments with an array of args, but this is
-	// only used internally.)
-	each: function( callback, args ) {
-		return jQuery.each( this, callback, args );
-	},
-
-	ready: function( fn ) {
-		// Add the callback
-		jQuery.ready.promise().done( fn );
-
-		return this;
-	},
-
-	slice: function() {
-		return this.pushStack( core_slice.apply( this, arguments ) );
-	},
-
-	first: function() {
-		return this.eq( 0 );
-	},
-
-	last: function() {
-		return this.eq( -1 );
-	},
-
-	eq: function( i ) {
-		var len = this.length,
-			j = +i + ( i < 0 ? len : 0 );
-		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
-	},
-
-	map: function( callback ) {
-		return this.pushStack( jQuery.map(this, function( elem, i ) {
-			return callback.call( elem, i, elem );
-		}));
-	},
-
-	end: function() {
-		return this.prevObject || this.constructor(null);
-	},
-
-	// For internal use only.
-	// Behaves like an Array's method, not like a jQuery method.
-	push: core_push,
-	sort: [].sort,
-	splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
-	var options, name, src, copy, copyIsArray, clone,
-		target = arguments[0] || {},
-		i = 1,
-		length = arguments.length,
-		deep = false;
-
-	// Handle a deep copy situation
-	if ( typeof target === "boolean" ) {
-		deep = target;
-		target = arguments[1] || {};
-		// skip the boolean and the target
-		i = 2;
-	}
-
-	// Handle case when target is a string or something (possible in deep copy)
-	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
-		target = {};
-	}
-
-	// extend jQuery itself if only one argument is passed
-	if ( length === i ) {
-		target = this;
-		--i;
-	}
-
-	for ( ; i < length; i++ ) {
-		// Only deal with non-null/undefined values
-		if ( (options = arguments[ i ]) != null ) {
-			// Extend the base object
-			for ( name in options ) {
-				src = target[ name ];
-				copy = options[ name ];
-
-				// Prevent never-ending loop
-				if ( target === copy ) {
-					continue;
-				}
-
-				// Recurse if we're merging plain objects or arrays
-				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
-					if ( copyIsArray ) {
-						copyIsArray = false;
-						clone = src && jQuery.isArray(src) ? src : [];
-
-					} else {
-						clone = src && jQuery.isPlainObject(src) ? src : {};
-					}
-
-					// Never move original objects, clone them
-					target[ name ] = jQuery.extend( deep, clone, copy );
-
-				// Don't bring in undefined values
-				} else if ( copy !== undefined ) {
-					target[ name ] = copy;
-				}
-			}
-		}
-	}
-
-	// Return the modified object
-	return target;
-};
-
-jQuery.extend({
-	// Unique for each copy of jQuery on the page
-	expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),
-
-	noConflict: function( deep ) {
-		if ( window.$ === jQuery ) {
-			window.$ = _$;
-		}
-
-		if ( deep && window.jQuery === jQuery ) {
-			window.jQuery = _jQuery;
-		}
-
-		return jQuery;
-	},
-
-	// Is the DOM ready to be used? Set to true once it occurs.
-	isReady: false,
-
-	// A counter to track how many items to wait for before
-	// the ready event fires. See #6781
-	readyWait: 1,
-
-	// Hold (or release) the ready event
-	holdReady: function( hold ) {
-		if ( hold ) {
-			jQuery.readyWait++;
-		} else {
-			jQuery.ready( true );
-		}
-	},
-
-	// Handle when the DOM is ready
-	ready: function( wait ) {
-
-		// Abort if there are pending holds or we're already ready
-		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
-			return;
-		}
-
-		// Remember that the DOM is ready
-		jQuery.isReady = true;
-
-		// If a normal DOM Ready event fired, decrement, and wait if need be
-		if ( wait !== true && --jQuery.readyWait > 0 ) {
-			return;
-		}
-
-		// If there are functions bound, to execute
-		readyList.resolveWith( document, [ jQuery ] );
-
-		// Trigger any bound ready events
-		if ( jQuery.fn.trigger ) {
-			jQuery( document ).trigger("ready").off("ready");
-		}
-	},
-
-	// See test/unit/core.js for details concerning isFunction.
-	// Since version 1.3, DOM methods and functions like alert
-	// aren't supported. They return false on IE (#2968).
-	isFunction: function( obj ) {
-		return jQuery.type(obj) === "function";
-	},
-
-	isArray: Array.isArray,
-
-	isWindow: function( obj ) {
-		return obj != null && obj === obj.window;
-	},
-
-	isNumeric: function( obj ) {
-		return !isNaN( parseFloat(obj) ) && isFinite( obj );
-	},
-
-	type: function( obj ) {
-		if ( obj == null ) {
-			return String( obj );
-		}
-		// Support: Safari <= 5.1 (functionish RegExp)
-		return typeof obj === "object" || typeof obj === "function" ?
-			class2type[ core_toString.call(obj) ] || "object" :
-			typeof obj;
-	},
-
-	isPlainObject: function( obj ) {
-		// Not plain objects:
-		// - Any object or value whose internal [[Class]] property is not "[object Object]"
-		// - DOM nodes
-		// - window
-		if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
-			return false;
-		}
-
-		// Support: Firefox <20
-		// The try/catch suppresses exceptions thrown when attempting to access
-		// the "constructor" property of certain host objects, ie. |window.location|
-		// https://bugzilla.mozilla.org/show_bug.cgi?id=814622
-		try {
-			if ( obj.constructor &&
-					!core_hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
-				return false;
-			}
-		} catch ( e ) {
-			return false;
-		}
-
-		// If the function hasn't returned already, we're confident that
-		// |obj| is a plain object, created by {} or constructed with new Object
-		return true;
-	},
-
-	isEmptyObject: function( obj ) {
-		var name;
-		for ( name in obj ) {
-			return false;
-		}
-		return true;
-	},
-
-	error: function( msg ) {
-		throw new Error( msg );
-	},
-
-	// data: string of html
-	// context (optional): If specified, the fragment will be created in this context, defaults to document
-	// keepScripts (optional): If true, will include scripts passed in the html string
-	parseHTML: function( data, context, keepScripts ) {
-		if ( !data || typeof data !== "string" ) {
-			return null;
-		}
-		if ( typeof context === "boolean" ) {
-			keepScripts = context;
-			context = false;
-		}
-		context = context || document;
-
-		var parsed = rsingleTag.exec( data ),
-			scripts = !keepScripts && [];
-
-		// Single tag
-		if ( parsed ) {
-			return [ context.createElement( parsed[1] ) ];
-		}
-
-		parsed = jQuery.buildFragment( [ data ], context, scripts );
-
-		if ( scripts ) {
-			jQuery( scripts ).remove();
-		}
-
-		return jQuery.merge( [], parsed.childNodes );
-	},
-
-	parseJSON: JSON.parse,
-
-	// Cross-browser xml parsing
-	parseXML: function( data ) {
-		var xml, tmp;
-		if ( !data || typeof data !== "string" ) {
-			return null;
-		}
-
-		// Support: IE9
-		try {
-			tmp = new DOMParser();
-			xml = tmp.parseFromString( data , "text/xml" );
-		} catch ( e ) {
-			xml = undefined;
-		}
-
-		if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
-			jQuery.error( "Invalid XML: " + data );
-		}
-		return xml;
-	},
-
-	noop: function() {},
-
-	// Evaluates a script in a global context
-	globalEval: function( code ) {
-		var script,
-				indirect = eval;
-
-		code = jQuery.trim( code );
-
-		if ( code ) {
-			// If the code includes a valid, prologue position
-			// strict mode pragma, execute code by injecting a
-			// script tag into the document.
-			if ( code.indexOf("use strict") === 1 ) {
-				script = document.createElement("script");
-				script.text = code;
-				document.head.appendChild( script ).parentNode.removeChild( script );
-			} else {
-			// Otherwise, avoid the DOM node creation, insertion
-			// and removal by using an indirect global eval
-				indirect( code );
-			}
-		}
-	},
-
-	// Convert dashed to camelCase; used by the css and data modules
-	// Microsoft forgot to hump their vendor prefix (#9572)
-	camelCase: function( string ) {
-		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
-	},
-
-	nodeName: function( elem, name ) {
-		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
-	},
-
-	// args is for internal usage only
-	each: function( obj, callback, args ) {
-		var value,
-			i = 0,
-			length = obj.length,
-			isArray = isArraylike( obj );
-
-		if ( args ) {
-			if ( isArray ) {
-				for ( ; i < length; i++ ) {
-					value = callback.apply( obj[ i ], args );
-
-					if ( value === false ) {
-						break;
-					}
-				}
-			} else {
-				for ( i in obj ) {
-					value = callback.apply( obj[ i ], args );
-
-					if ( value === false ) {
-						break;
-					}
-				}
-			}
-
-		// A special, fast, case for the most common use of each
-		} else {
-			if ( isArray ) {
-				for ( ; i < length; i++ ) {
-					value = callback.call( obj[ i ], i, obj[ i ] );
-
-					if ( value === false ) {
-						break;
-					}
-				}
-			} else {
-				for ( i in obj ) {
-					value = callback.call( obj[ i ], i, obj[ i ] );
-
-					if ( value === false ) {
-						break;
-					}
-				}
-			}
-		}
-
-		return obj;
-	},
-
-	trim: function( text ) {
-		return text == null ? "" : core_trim.call( text );
-	},
-
-	// results is for internal usage only
-	makeArray: function( arr, results ) {
-		var ret = results || [];
-
-		if ( arr != null ) {
-			if ( isArraylike( Object(arr) ) ) {
-				jQuery.merge( ret,
-					typeof arr === "string" ?
-					[ arr ] : arr
-				);
-			} else {
-				core_push.call( ret, arr );
-			}
-		}
-
-		return ret;
-	},
-
-	inArray: function( elem, arr, i ) {
-		return arr == null ? -1 : core_indexOf.call( arr, elem, i );
-	},
-
-	merge: function( first, second ) {
-		var l = second.length,
-			i = first.length,
-			j = 0;
-
-		if ( typeof l === "number" ) {
-			for ( ; j < l; j++ ) {
-				first[ i++ ] = second[ j ];
-			}
-		} else {
-			while ( second[j] !== undefined ) {
-				first[ i++ ] = second[ j++ ];
-			}
-		}
-
-		first.length = i;
-
-		return first;
-	},
-
-	grep: function( elems, callback, inv ) {
-		var retVal,
-			ret = [],
-			i = 0,
-			length = elems.length;
-		inv = !!inv;
-
-		// Go through the array, only saving the items
-		// that pass the validator function
-		for ( ; i < length; i++ ) {
-			retVal = !!callback( elems[ i ], i );
-			if ( inv !== retVal ) {
-				ret.push( elems[ i ] );
-			}
-		}
-
-		return ret;
-	},
-
-	// arg is for internal usage only
-	map: function( elems, callback, arg ) {
-		var value,
-			i = 0,
-			length = elems.length,
-			isArray = isArraylike( elems ),
-			ret = [];
-
-		// Go through the array, translating each of the items to their
-		if ( isArray ) {
-			for ( ; i < length; i++ ) {
-				value = callback( elems[ i ], i, arg );
-
-				if ( value != null ) {
-					ret[ ret.length ] = value;
-				}
-			}
-
-		// Go through every key on the object,
-		} else {
-			for ( i in elems ) {
-				value = callback( elems[ i ], i, arg );
-
-				if ( value != null ) {
-					ret[ ret.length ] = value;
-				}
-			}
-		}
-
-		// Flatten any nested arrays
-		return core_concat.apply( [], ret );
-	},
-
-	// A global GUID counter for objects
-	guid: 1,
-
-	// Bind a function to a context, optionally partially applying any
-	// arguments.
-	proxy: function( fn, context ) {
-		var tmp, args, proxy;
-
-		if ( typeof context === "string" ) {
-			tmp = fn[ context ];
-			context = fn;
-			fn = tmp;
-		}
-
-		// Quick check to determine if target is callable, in the spec
-		// this throws a TypeError, but we will just return undefined.
-		if ( !jQuery.isFunction( fn ) ) {
-			return undefined;
-		}
-
-		// Simulated bind
-		args = core_slice.call( arguments, 2 );
-		proxy = function() {
-			return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
-		};
-
-		// Set the guid of unique handler to the same of original handler, so it can be removed
-		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
-		return proxy;
-	},
-
-	// Multifunctional method to get and set values of a collection
-	// The value/s can optionally be executed if it's a function
-	access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
-		var i = 0,
-			length = elems.length,
-			bulk = key == null;
-
-		// Sets many values
-		if ( jQuery.type( key ) === "object" ) {
-			chainable = true;
-			for ( i in key ) {
-				jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
-			}
-
-		// Sets one value
-		} else if ( value !== undefined ) {
-			chainable = true;
-
-			if ( !jQuery.isFunction( value ) ) {
-				raw = true;
-			}
-
-			if ( bulk ) {
-				// Bulk operations run against the entire set
-				if ( raw ) {
-					fn.call( elems, value );
-					fn = null;
-
-				// ...except when executing function values
-				} else {
-					bulk = fn;
-					fn = function( elem, key, value ) {
-						return bulk.call( jQuery( elem ), value );
-					};
-				}
-			}
-
-			if ( fn ) {
-				for ( ; i < length; i++ ) {
-					fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
-				}
-			}
-		}
-
-		return chainable ?
-			elems :
-
-			// Gets
-			bulk ?
-				fn.call( elems ) :
-				length ? fn( elems[0], key ) : emptyGet;
-	},
-
-	now: Date.now,
-
-	// A method for quickly swapping in/out CSS properties to get correct calculations.
-	// Note: this method belongs to the css module but it's needed here for the support module.
-	// If support gets modularized, this method should be moved back to the css module.
-	swap: function( elem, options, callback, args ) {
-		var ret, name,
-			old = {};
-
-		// Remember the old values, and insert the new ones
-		for ( name in options ) {
-			old[ name ] = elem.style[ name ];
-			elem.style[ name ] = options[ name ];
-		}
-
-		ret = callback.apply( elem, args || [] );
-
-		// Revert the old values
-		for ( name in options ) {
-			elem.style[ name ] = old[ name ];
-		}
-
-		return ret;
-	}
-});
-
-jQuery.ready.promise = function( obj ) {
-	if ( !readyList ) {
-
-		readyList = jQuery.Deferred();
-
-		// Catch cases where $(document).ready() is called after the browser event has already occurred.
-		// we once tried to use readyState "interactive" here, but it caused issues like the one
-		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
-		if ( document.readyState === "complete" ) {
-			// Handle it asynchronously to allow scripts the opportunity to delay ready
-			setTimeout( jQuery.ready );
-
-		} else {
-
-			// Use the handy event callback
-			document.addEventListener( "DOMContentLoaded", completed, false );
-
-			// A fallback to window.onload, that will always work
-			window.addEventListener( "load", completed, false );
-		}
-	}
-	return readyList.promise( obj );
-};
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
-	class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-function isArraylike( obj ) {
-	var length = obj.length,
-		type = jQuery.type( obj );
-
-	if ( jQuery.isWindow( obj ) ) {
-		return false;
-	}
-
-	if ( obj.nodeType === 1 && length ) {
-		return true;
-	}
-
-	return type === "array" || type !== "function" &&
-		( length === 0 ||
-		typeof length === "number" && length > 0 && ( length - 1 ) in obj );
-}
-
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-/*!
- * Sizzle CSS Selector Engine v1.9.4-pre
- * http://sizzlejs.com/
- *
- * Copyright 2013 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2013-06-03
- */
-(function( window, undefined ) {
-
-var i,
-	support,
-	cachedruns,
-	Expr,
-	getText,
-	isXML,
-	compile,
-	outermostContext,
-	sortInput,
-
-	// Local document vars
-	setDocument,
-	document,
-	docElem,
-	documentIsHTML,
-	rbuggyQSA,
-	rbuggyMatches,
-	matches,
-	contains,
-
-	// Instance-specific data
-	expando = "sizzle" + -(new Date()),
-	preferredDoc = window.document,
-	dirruns = 0,
-	done = 0,
-	classCache = createCache(),
-	tokenCache = createCache(),
-	compilerCache = createCache(),
-	hasDuplicate = false,
-	sortOrder = function( a, b ) {
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-		}
-		return 0;
-	},
-
-	// General-purpose constants
-	strundefined = typeof undefined,
-	MAX_NEGATIVE = 1 << 31,
-
-	// Instance methods
-	hasOwn = ({}).hasOwnProperty,
-	arr = [],
-	pop = arr.pop,
-	push_native = arr.push,
-	push = arr.push,
-	slice = arr.slice,
-	// Use a stripped-down indexOf if we can't use a native one
-	indexOf = arr.indexOf || function( elem ) {
-		var i = 0,
-			len = this.length;
-		for ( ; i < len; i++ ) {
-			if ( this[i] === elem ) {
-				return i;
-			}
-		}
-		return -1;
-	},
-
-	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
-
-	// Regular expressions
-
-	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
-	whitespace = "[\\x20\\t\\r\\n\\f]",
-	// http://www.w3.org/TR/css3-syntax/#characters
-	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
-
-	// Loosely modeled on CSS identifier characters
-	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
-	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
-	identifier = characterEncoding.replace( "w", "w#" ),
-
-	// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
-	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
-		"*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
-
-	// Prefer arguments quoted,
-	//   then not containing pseudos/brackets,
-	//   then attribute selectors/non-parenthetical expressions,
-	//   then anything else
-	// These preferences are here to reduce the number of selectors
-	//   needing tokenize in the PSEUDO preFilter
-	pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
-
-	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
-	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
-
-	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
-	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
-
-	rsibling = new RegExp( whitespace + "*[+~]" ),
-	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*)" + whitespace + "*\\]", "g" ),
-
-	rpseudo = new RegExp( pseudos ),
-	ridentifier = new RegExp( "^" + identifier + "$" ),
-
-	matchExpr = {
-		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
-		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
-		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
-		"ATTR": new RegExp( "^" + attributes ),
-		"PSEUDO": new RegExp( "^" + pseudos ),
-		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
-			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
-			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
-		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
-		// For use in libraries implementing .is()
-		// We use this for POS matching in `select`
-		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
-			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
-	},
-
-	rnative = /^[^{]+\{\s*\[native \w/,
-
-	// Easily-parseable/retrievable ID or TAG or CLASS selectors
-	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
-
-	rinputs = /^(?:input|select|textarea|button)$/i,
-	rheader = /^h\d$/i,
-
-	rescape = /'|\\/g,
-
-	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
-	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
-	funescape = function( _, escaped, escapedWhitespace ) {
-		var high = "0x" + escaped - 0x10000;
-		// NaN means non-codepoint
-		// Support: Firefox
-		// Workaround erroneous numeric interpretation of +"0x"
-		return high !== high || escapedWhitespace ?
-			escaped :
-			// BMP codepoint
-			high < 0 ?
-				String.fromCharCode( high + 0x10000 ) :
-				// Supplemental Plane codepoint (surrogate pair)
-				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
-	};
-
-// Optimize for push.apply( _, NodeList )
-try {
-	push.apply(
-		(arr = slice.call( preferredDoc.childNodes )),
-		preferredDoc.childNodes
-	);
-	// Support: Android<4.0
-	// Detect silently failing push.apply
-	arr[ preferredDoc.childNodes.length ].nodeType;
-} catch ( e ) {
-	push = { apply: arr.length ?
-
-		// Leverage slice if possible
-		function( target, els ) {
-			push_native.apply( target, slice.call(els) );
-		} :
-
-		// Support: IE<9
-		// Otherwise append directly
-		function( target, els ) {
-			var j = target.length,
-				i = 0;
-			// Can't trust NodeList.length
-			while ( (target[j++] = els[i++]) ) {}
-			target.length = j - 1;
-		}
-	};
-}
-
-function Sizzle( selector, context, results, seed ) {
-	var match, elem, m, nodeType,
-		// QSA vars
-		i, groups, old, nid, newContext, newSelector;
-
-	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
-		setDocument( context );
-	}
-
-	context = context || document;
-	results = results || [];
-
-	if ( !selector || typeof selector !== "string" ) {
-		return results;
-	}
-
-	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
-		return [];
-	}
-
-	if ( documentIsHTML && !seed ) {
-
-		// Shortcuts
-		if ( (match = rquickExpr.exec( selector )) ) {
-			// Speed-up: Sizzle("#ID")
-			if ( (m = match[1]) ) {
-				if ( nodeType === 9 ) {
-					elem = context.getElementById( m );
-					// Check parentNode to catch when Blackberry 4.6 returns
-					// nodes that are no longer in the document #6963
-					if ( elem && elem.parentNode ) {
-						// Handle the case where IE, Opera, and Webkit return items
-						// by name instead of ID
-						if ( elem.id === m ) {
-							results.push( elem );
-							return results;
-						}
-					} else {
-						return results;
-					}
-				} else {
-					// Context is not a document
-					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
-						contains( context, elem ) && elem.id === m ) {
-						results.push( elem );
-						return results;
-					}
-				}
-
-			// Speed-up: Sizzle("TAG")
-			} else if ( match[2] ) {
-				push.apply( results, context.getElementsByTagName( selector ) );
-				return results;
-
-			// Speed-up: Sizzle(".CLASS")
-			} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
-				push.apply( results, context.getElementsByClassName( m ) );
-				return results;
-			}
-		}
-
-		// QSA path
-		if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
-			nid = old = expando;
-			newContext = context;
-			newSelector = nodeType === 9 && selector;
-
-			// qSA works strangely on Element-rooted queries
-			// We can work around this by specifying an extra ID on the root
-			// and working up from there (Thanks to Andrew Dupont for the technique)
-			// IE 8 doesn't work on object elements
-			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
-				groups = tokenize( selector );
-
-				if ( (old = context.getAttribute("id")) ) {
-					nid = old.replace( rescape, "\\$&" );
-				} else {
-					context.setAttribute( "id", nid );
-				}
-				nid = "[id='" + nid + "'] ";
-
-				i = groups.length;
-				while ( i-- ) {
-					groups[i] = nid + toSelector( groups[i] );
-				}
-				newContext = rsibling.test( selector ) && context.parentNode || context;
-				newSelector = groups.join(",");
-			}
-
-			if ( newSelector ) {
-				try {
-					push.apply( results,
-						newContext.querySelectorAll( newSelector )
-					);
-					return results;
-				} catch(qsaError) {
-				} finally {
-					if ( !old ) {
-						context.removeAttribute("id");
-					}
-				}
-			}
-		}
-	}
-
-	// All others
-	return select( selector.replace( rtrim, "$1" ), context, results, seed );
-}
-
-/**
- * Create key-value caches of limited size
- * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
- *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- *	deleting the oldest entry
- */
-function createCache() {
-	var keys = [];
-
-	function cache( key, value ) {
-		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
-		if ( keys.push( key += " " ) > Expr.cacheLength ) {
-			// Only keep the most recent entries
-			delete cache[ keys.shift() ];
-		}
-		return (cache[ key ] = value);
-	}
-	return cache;
-}
-
-/**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
-function markFunction( fn ) {
-	fn[ expando ] = true;
-	return fn;
-}
-
-/**
- * Support testing using an element
- * @param {Function} fn Passed the created div and expects a boolean result
- */
-function assert( fn ) {
-	var div = document.createElement("div");
-
-	try {
-		return !!fn( div );
-	} catch (e) {
-		return false;
-	} finally {
-		// Remove from its parent by default
-		if ( div.parentNode ) {
-			div.parentNode.removeChild( div );
-		}
-		// release memory in IE
-		div = null;
-	}
-}
-
-/**
- * Adds the same handler for all of the specified attrs
- * @param {String} attrs Pipe-separated list of attributes
- * @param {Function} handler The method that will be applied
- */
-function addHandle( attrs, handler ) {
-	var arr = attrs.split("|"),
-		i = attrs.length;
-
-	while ( i-- ) {
-		Expr.attrHandle[ arr[i] ] = handler;
-	}
-}
-
-/**
- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
- */
-function siblingCheck( a, b ) {
-	var cur = b && a,
-		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
-			( ~b.sourceIndex || MAX_NEGATIVE ) -
-			( ~a.sourceIndex || MAX_NEGATIVE );
-
-	// Use IE sourceIndex if available on both nodes
-	if ( diff ) {
-		return diff;
-	}
-
-	// Check if b follows a
-	if ( cur ) {
-		while ( (cur = cur.nextSibling) ) {
-			if ( cur === b ) {
-				return -1;
-			}
-		}
-	}
-
-	return a ? 1 : -1;
-}
-
-/**
- * Returns a function to use in pseudos for input types
- * @param {String} type
- */
-function createInputPseudo( type ) {
-	return function( elem ) {
-		var name = elem.nodeName.toLowerCase();
-		return name === "input" && elem.type === type;
-	};
-}
-
-/**
- * Returns a function to use in pseudos for buttons
- * @param {String} type
- */
-function createButtonPseudo( type ) {
-	return function( elem ) {
-		var name = elem.nodeName.toLowerCase();
-		return (name === "input" || name === "button") && elem.type === type;
-	};
-}
-
-/**
- * Returns a function to use in pseudos for positionals
- * @param {Function} fn
- */
-function createPositionalPseudo( fn ) {
-	return markFunction(function( argument ) {
-		argument = +argument;
-		return markFunction(function( seed, matches ) {
-			var j,
-				matchIndexes = fn( [], seed.length, argument ),
-				i = matchIndexes.length;
-
-			// Match elements found at the specified indexes
-			while ( i-- ) {
-				if ( seed[ (j = matchIndexes[i]) ] ) {
-					seed[j] = !(matches[j] = seed[j]);
-				}
-			}
-		});
-	});
-}
-
-/**
- * Detect xml
- * @param {Element|Object} elem An element or a document
- */
-isXML = Sizzle.isXML = function( elem ) {
-	// documentElement is verified for cases where it doesn't yet exist
-	// (such as loading iframes in IE - #4833)
-	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
-	return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-// Expose support vars for convenience
-support = Sizzle.support = {};
-
-/**
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set the document
- * @returns {Object} Returns the current document
- */
-setDocument = Sizzle.setDocument = function( node ) {
-	var doc = node ? node.ownerDocument || node : preferredDoc,
-		parent = doc.defaultView;
-
-	// If no document and documentElement is available, return
-	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
-		return document;
-	}
-
-	// Set our document
-	document = doc;
-	docElem = doc.documentElement;
-
-	// Support tests
-	documentIsHTML = !isXML( doc );
-
-	// Support: IE>8
-	// If iframe document is assigned to "document" variable and if iframe has been reloaded,
-	// IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
-	// IE6-8 do not support the defaultView property so parent will be undefined
-	if ( parent && parent.attachEvent && parent !== parent.top ) {
-		parent.attachEvent( "onbeforeunload", function() {
-			setDocument();
-		});
-	}
-
-	/* Attributes
-	---------------------------------------------------------------------- */
-
-	// Support: IE<8
-	// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
-	support.attributes = assert(function( div ) {
-		div.className = "i";
-		return !div.getAttribute("className");
-	});
-
-	/* getElement(s)By*
-	---------------------------------------------------------------------- */
-
-	// Check if getElementsByTagName("*") returns only elements
-	support.getElementsByTagName = assert(function( div ) {
-		div.appendChild( doc.createComment("") );
-		return !div.getElementsByTagName("*").length;
-	});
-
-	// Check if getElementsByClassName can be trusted
-	support.getElementsByClassName = assert(function( div ) {
-		div.innerHTML = "<div class='a'></div><div class='a i'></div>";
-
-		// Support: Safari<4
-		// Catch class over-caching
-		div.firstChild.className = "i";
-		// Support: Opera<10
-		// Catch gEBCN failure to find non-leading classes
-		return div.getElementsByClassName("i").length === 2;
-	});
-
-	// Support: IE<10
-	// Check if getElementById returns elements by name
-	// The broken getElementById methods don't pick up programatically-set names,
-	// so use a roundabout getElementsByName test
-	support.getById = assert(function( div ) {
-		docElem.appendChild( div ).id = expando;
-		return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
-	});
-
-	// ID find and filter
-	if ( support.getById ) {
-		Expr.find["ID"] = function( id, context ) {
-			if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
-				var m = context.getElementById( id );
-				// Check parentNode to catch when Blackberry 4.6 returns
-				// nodes that are no longer in the document #6963
-				return m && m.parentNode ? [m] : [];
-			}
-		};
-		Expr.filter["ID"] = function( id ) {
-			var attrId = id.replace( runescape, funescape );
-			return function( elem ) {
-				return elem.getAttribute("id") === attrId;
-			};
-		};
-	} else {
-		// Support: IE6/7
-		// getElementById is not reliable as a find shortcut
-		delete Expr.find["ID"];
-
-		Expr.filter["ID"] =  function( id ) {
-			var attrId = id.replace( runescape, funescape );
-			return function( elem ) {
-				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
-				return node && node.value === attrId;
-			};
-		};
-	}
-
-	// Tag
-	Expr.find["TAG"] = support.getElementsByTagName ?
-		function( tag, context ) {
-			if ( typeof context.getElementsByTagName !== strundefined ) {
-				return context.getElementsByTagName( tag );
-			}
-		} :
-		function( tag, context ) {
-			var elem,
-				tmp = [],
-				i = 0,
-				results = context.getElementsByTagName( tag );
-
-			// Filter out possible comments
-			if ( tag === "*" ) {
-				while ( (elem = results[i++]) ) {
-					if ( elem.nodeType === 1 ) {
-						tmp.push( elem );
-					}
-				}
-
-				return tmp;
-			}
-			return results;
-		};
-
-	// Class
-	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
-		if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
-			return context.getElementsByClassName( className );
-		}
-	};
-
-	/* QSA/matchesSelector
-	---------------------------------------------------------------------- */
-
-	// QSA and matchesSelector support
-
-	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
-	rbuggyMatches = [];
-
-	// qSa(:focus) reports false when true (Chrome 21)
-	// We allow this because of a bug in IE8/9 that throws an error
-	// whenever `document.activeElement` is accessed on an iframe
-	// So, we allow :focus to pass through QSA all the time to avoid the IE error
-	// See http://bugs.jquery.com/ticket/13378
-	rbuggyQSA = [];
-
-	if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
-		// Build QSA regex
-		// Regex strategy adopted from Diego Perini
-		assert(function( div ) {
-			// Select is set to empty string on purpose
-			// This is to test IE's treatment of not explicitly
-			// setting a boolean content attribute,
-			// since its presence should be enough
-			// http://bugs.jquery.com/ticket/12359
-			div.innerHTML = "<select><option selected=''></option></select>";
-
-			// Support: IE8
-			// Boolean attributes and "value" are not treated correctly
-			if ( !div.querySelectorAll("[selected]").length ) {
-				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
-			}
-
-			// Webkit/Opera - :checked should return selected option elements
-			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
-			// IE8 throws error here and will not see later tests
-			if ( !div.querySelectorAll(":checked").length ) {
-				rbuggyQSA.push(":checked");
-			}
-		});
-
-		assert(function( div ) {
-
-			// Support: Opera 10-12/IE8
-			// ^= $= *= and empty values
-			// Should not select anything
-			// Support: Windows 8 Native Apps
-			// The type attribute is restricted during .innerHTML assignment
-			var input = doc.createElement("input");
-			input.setAttribute( "type", "hidden" );
-			div.appendChild( input ).setAttribute( "t", "" );
-
-			if ( div.querySelectorAll("[t^='']").length ) {
-				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
-			}
-
-			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
-			// IE8 throws error here and will not see later tests
-			if ( !div.querySelectorAll(":enabled").length ) {
-				rbuggyQSA.push( ":enabled", ":disabled" );
-			}
-
-			// Opera 10-11 does not throw on post-comma invalid pseudos
-			div.querySelectorAll("*,:x");
-			rbuggyQSA.push(",.*:");
-		});
-	}
-
-	if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector ||
-		docElem.mozMatchesSelector ||
-		docElem.oMatchesSelector ||
-		docElem.msMatchesSelector) )) ) {
-
-		assert(function( div ) {
-			// Check to see if it's possible to do matchesSelector
-			// on a disconnected node (IE 9)
-			support.disconnectedMatch = matches.call( div, "div" );
-
-			// This should fail with an exception
-			// Gecko does not error, returns false instead
-			matches.call( div, "[s!='']:x" );
-			rbuggyMatches.push( "!=", pseudos );
-		});
-	}
-
-	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
-	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
-
-	/* Contains
-	---------------------------------------------------------------------- */
-
-	// Element contains another
-	// Purposefully does not implement inclusive descendent
-	// As in, an element does not contain itself
-	contains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ?
-		function( a, b ) {
-			var adown = a.nodeType === 9 ? a.documentElement : a,
-				bup = b && b.parentNode;
-			return a === bup || !!( bup && bup.nodeType === 1 && (
-				adown.contains ?
-					adown.contains( bup ) :
-					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
-			));
-		} :
-		function( a, b ) {
-			if ( b ) {
-				while ( (b = b.parentNode) ) {
-					if ( b === a ) {
-						return true;
-					}
-				}
-			}
-			return false;
-		};
-
-	/* Sorting
-	---------------------------------------------------------------------- */
-
-	// Document order sorting
-	sortOrder = docElem.compareDocumentPosition ?
-	function( a, b ) {
-
-		// Flag for duplicate removal
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-		}
-
-		var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );
-
-		if ( compare ) {
-			// Disconnected nodes
-			if ( compare & 1 ||
-				(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
-
-				// Choose the first element that is related to our preferred document
-				if ( a === doc || contains(preferredDoc, a) ) {
-					return -1;
-				}
-				if ( b === doc || contains(preferredDoc, b) ) {
-					return 1;
-				}
-
-				// Maintain original order
-				return sortInput ?
-					( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
-					0;
-			}
-
-			return compare & 4 ? -1 : 1;
-		}
-
-		// Not directly comparable, sort on existence of method
-		return a.compareDocumentPosition ? -1 : 1;
-	} :
-	function( a, b ) {
-		var cur,
-			i = 0,
-			aup = a.parentNode,
-			bup = b.parentNode,
-			ap = [ a ],
-			bp = [ b ];
-
-		// Exit early if the nodes are identical
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-
-		// Parentless nodes are either documents or disconnected
-		} else if ( !aup || !bup ) {
-			return a === doc ? -1 :
-				b === doc ? 1 :
-				aup ? -1 :
-				bup ? 1 :
-				sortInput ?
-				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
-				0;
-
-		// If the nodes are siblings, we can do a quick check
-		} else if ( aup === bup ) {
-			return siblingCheck( a, b );
-		}
-
-		// Otherwise we need full lists of their ancestors for comparison
-		cur = a;
-		while ( (cur = cur.parentNode) ) {
-			ap.unshift( cur );
-		}
-		cur = b;
-		while ( (cur = cur.parentNode) ) {
-			bp.unshift( cur );
-		}
-
-		// Walk down the tree looking for a discrepancy
-		while ( ap[i] === bp[i] ) {
-			i++;
-		}
-
-		return i ?
-			// Do a sibling check if the nodes have a common ancestor
-			siblingCheck( ap[i], bp[i] ) :
-
-			// Otherwise nodes in our document sort first
-			ap[i] === preferredDoc ? -1 :
-			bp[i] === preferredDoc ? 1 :
-			0;
-	};
-
-	return doc;
-};
-
-Sizzle.matches = function( expr, elements ) {
-	return Sizzle( expr, null, null, elements );
-};
-
-Sizzle.matchesSelector = function( elem, expr ) {
-	// Set document vars if needed
-	if ( ( elem.ownerDocument || elem ) !== document ) {
-		setDocument( elem );
-	}
-
-	// Make sure that attribute selectors are quoted
-	expr = expr.replace( rattributeQuotes, "='$1']" );
-
-	if ( support.matchesSelector && documentIsHTML &&
-		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
-		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
-
-		try {
-			var ret = matches.call( elem, expr );
-
-			// IE 9's matchesSelector returns false on disconnected nodes
-			if ( ret || support.disconnectedMatch ||
-					// As well, disconnected nodes are said to be in a document
-					// fragment in IE 9
-					elem.document && elem.document.nodeType !== 11 ) {
-				return ret;
-			}
-		} catch(e) {}
-	}
-
-	return Sizzle( expr, document, null, [elem] ).length > 0;
-};
-
-Sizzle.contains = function( context, elem ) {
-	// Set document vars if needed
-	if ( ( context.ownerDocument || context ) !== document ) {
-		setDocument( context );
-	}
-	return contains( context, elem );
-};
-
-Sizzle.attr = function( elem, name ) {
-	// Set document vars if needed
-	if ( ( elem.ownerDocument || elem ) !== document ) {
-		setDocument( elem );
-	}
-
-	var fn = Expr.attrHandle[ name.toLowerCase() ],
-		// Don't get fooled by Object.prototype properties (jQuery #13807)
-		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
-			fn( elem, name, !documentIsHTML ) :
-			undefined;
-
-	return val === undefined ?
-		support.attributes || !documentIsHTML ?
-			elem.getAttribute( name ) :
-			(val = elem.getAttributeNode(name)) && val.specified ?
-				val.value :
-				null :
-		val;
-};
-
-Sizzle.error = function( msg ) {
-	throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Document sorting and removing duplicates
- * @param {ArrayLike} results
- */
-Sizzle.uniqueSort = function( results ) {
-	var elem,
-		duplicates = [],
-		j = 0,
-		i = 0;
-
-	// Unless we *know* we can detect duplicates, assume their presence
-	hasDuplicate = !support.detectDuplicates;
-	sortInput = !support.sortStable && results.slice( 0 );
-	results.sort( sortOrder );
-
-	if ( hasDuplicate ) {
-		while ( (elem = results[i++]) ) {
-			if ( elem === results[ i ] ) {
-				j = duplicates.push( i );
-			}
-		}
-		while ( j-- ) {
-			results.splice( duplicates[ j ], 1 );
-		}
-	}
-
-	return results;
-};
-
-/**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-getText = Sizzle.getText = function( elem ) {
-	var node,
-		ret = "",
-		i = 0,
-		nodeType = elem.nodeType;
-
-	if ( !nodeType ) {
-		// If no nodeType, this is expected to be an array
-		for ( ; (node = elem[i]); i++ ) {
-			// Do not traverse comment nodes
-			ret += getText( node );
-		}
-	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
-		// Use textContent for elements
-		// innerText usage removed for consistency of new lines (see #11153)
-		if ( typeof elem.textContent === "string" ) {
-			return elem.textContent;
-		} else {
-			// Traverse its children
-			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
-				ret += getText( elem );
-			}
-		}
-	} else if ( nodeType === 3 || nodeType === 4 ) {
-		return elem.nodeValue;
-	}
-	// Do not include comment or processing instruction nodes
-
-	return ret;
-};
-
-Expr = Sizzle.selectors = {
-
-	// Can be adjusted by the user
-	cacheLength: 50,
-
-	createPseudo: markFunction,
-
-	match: matchExpr,
-
-	attrHandle: {},
-
-	find: {},
-
-	relative: {
-		">": { dir: "parentNode", first: true },
-		" ": { dir: "parentNode" },
-		"+": { dir: "previousSibling", first: true },
-		"~": { dir: "previousSibling" }
-	},
-
-	preFilter: {
-		"ATTR": function( match ) {
-			match[1] = match[1].replace( runescape, funescape );
-
-			// Move the given value to match[3] whether quoted or unquoted
-			match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
-
-			if ( match[2] === "~=" ) {
-				match[3] = " " + match[3] + " ";
-			}
-
-			return match.slice( 0, 4 );
-		},
-
-		"CHILD": function( match ) {
-			/* matches from matchExpr["CHILD"]
-				1 type (only|nth|...)
-				2 what (child|of-type)
-				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
-				4 xn-component of xn+y argument ([+-]?\d*n|)
-				5 sign of xn-component
-				6 x of xn-component
-				7 sign of y-component
-				8 y of y-component
-			*/
-			match[1] = match[1].toLowerCase();
-
-			if ( match[1].slice( 0, 3 ) === "nth" ) {
-				// nth-* requires argument
-				if ( !match[3] ) {
-					Sizzle.error( match[0] );
-				}
-
-				// numeric x and y parameters for Expr.filter.CHILD
-				// remember that false/true cast respectively to 0/1
-				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
-				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
-
-			// other types prohibit arguments
-			} else if ( match[3] ) {
-				Sizzle.error( match[0] );
-			}
-
-			return match;
-		},
-
-		"PSEUDO": function( match ) {
-			var excess,
-				unquoted = !match[5] && match[2];
-
-			if ( matchExpr["CHILD"].test( match[0] ) ) {
-				return null;
-			}
-
-			// Accept quoted arguments as-is
-			if ( match[3] && match[4] !== undefined ) {
-				match[2] = match[4];
-
-			// Strip excess characters from unquoted arguments
-			} else if ( unquoted && rpseudo.test( unquoted ) &&
-				// Get excess from tokenize (recursively)
-				(excess = tokenize( unquoted, true )) &&
-				// advance to the next closing parenthesis
-				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
-
-				// excess is a negative index
-				match[0] = match[0].slice( 0, excess );
-				match[2] = unquoted.slice( 0, excess );
-			}
-
-			// Return only captures needed by the pseudo filter method (type and argument)
-			return match.slice( 0, 3 );
-		}
-	},
-
-	filter: {
-
-		"TAG": function( nodeNameSelector ) {
-			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
-			return nodeNameSelector === "*" ?
-				function() { return true; } :
-				function( elem ) {
-					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
-				};
-		},
-
-		"CLASS": function( className ) {
-			var pattern = classCache[ className + " " ];
-
-			return pattern ||
-				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
-				classCache( className, function( elem ) {
-					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
-				});
-		},
-
-		"ATTR": function( name, operator, check ) {
-			return function( elem ) {
-				var result = Sizzle.attr( elem, name );
-
-				if ( result == null ) {
-					return operator === "!=";
-				}
-				if ( !operator ) {
-					return true;
-				}
-
-				result += "";
-
-				return operator === "=" ? result === check :
-					operator === "!=" ? result !== check :
-					operator === "^=" ? check && result.indexOf( check ) === 0 :
-					operator === "*=" ? check && result.indexOf( check ) > -1 :
-					operator === "$=" ? check && result.slice( -check.length ) === check :
-					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
-					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
-					false;
-			};
-		},
-
-		"CHILD": function( type, what, argument, first, last ) {
-			var simple = type.slice( 0, 3 ) !== "nth",
-				forward = type.slice( -4 ) !== "last",
-				ofType = what === "of-type";
-
-			return first === 1 && last === 0 ?
-
-				// Shortcut for :nth-*(n)
-				function( elem ) {
-					return !!elem.parentNode;
-				} :
-
-				function( elem, context, xml ) {
-					var cache, outerCache, node, diff, nodeIndex, start,
-						dir = simple !== forward ? "nextSibling" : "previousSibling",
-						parent = elem.parentNode,
-						name = ofType && elem.nodeName.toLowerCase(),
-						useCache = !xml && !ofType;
-
-					if ( parent ) {
-
-						// :(first|last|only)-(child|of-type)
-						if ( simple ) {
-							while ( dir ) {
-								node = elem;
-								while ( (node = node[ dir ]) ) {
-									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
-										return false;
-									}
-								}
-								// Reverse direction for :only-* (if we haven't yet done so)
-								start = dir = type === "only" && !start && "nextSibling";
-							}
-							return true;
-						}
-
-						start = [ forward ? parent.firstChild : parent.lastChild ];
-
-						// non-xml :nth-child(...) stores cache data on `parent`
-						if ( forward && useCache ) {
-							// Seek `elem` from a previously-cached index
-							outerCache = parent[ expando ] || (parent[ expando ] = {});
-							cache = outerCache[ type ] || [];
-							nodeIndex = cache[0] === dirruns && cache[1];
-							diff = cache[0] === dirruns && cache[2];
-							node = nodeIndex && parent.childNodes[ nodeIndex ];
-
-							while ( (node = ++nodeIndex && node && node[ dir ] ||
-
-								// Fallback to seeking `elem` from the start
-								(diff = nodeIndex = 0) || start.pop()) ) {
-
-								// When found, cache indexes on `parent` and break
-								if ( node.nodeType === 1 && ++diff && node === elem ) {
-									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
-									break;
-								}
-							}
-
-						// Use previously-cached element index if available
-						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
-							diff = cache[1];
-
-						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
-						} else {
-							// Use the same loop as above to seek `elem` from the start
-							while ( (node = ++nodeIndex && node && node[ dir ] ||
-								(diff = nodeIndex = 0) || start.pop()) ) {
-
-								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
-									// Cache the index of each encountered element
-									if ( useCache ) {
-										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
-									}
-
-									if ( node === elem ) {
-										break;
-									}
-								}
-							}
-						}
-
-						// Incorporate the offset, then check against cycle size
-						diff -= last;
-						return diff === first || ( diff % first === 0 && diff / first >= 0 );
-					}
-				};
-		},
-
-		"PSEUDO": function( pseudo, argument ) {
-			// pseudo-class names are case-insensitive
-			// http://www.w3.org/TR/selectors/#pseudo-classes
-			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
-			// Remember that setFilters inherits from pseudos
-			var args,
-				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
-					Sizzle.error( "unsupported pseudo: " + pseudo );
-
-			// The user may use createPseudo to indicate that
-			// arguments are needed to create the filter function
-			// just as Sizzle does
-			if ( fn[ expando ] ) {
-				return fn( argument );
-			}
-
-			// But maintain support for old signatures
-			if ( fn.length > 1 ) {
-				args = [ pseudo, pseudo, "", argument ];
-				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
-					markFunction(function( seed, matches ) {
-						var idx,
-							matched = fn( seed, argument ),
-							i = matched.length;
-						while ( i-- ) {
-							idx = indexOf.call( seed, matched[i] );
-							seed[ idx ] = !( matches[ idx ] = matched[i] );
-						}
-					}) :
-					function( elem ) {
-						return fn( elem, 0, args );
-					};
-			}
-
-			return fn;
-		}
-	},
-
-	pseudos: {
-		// Potentially complex pseudos
-		"not": markFunction(function( selector ) {
-			// Trim the selector passed to compile
-			// to avoid treating leading and trailing
-			// spaces as combinators
-			var input = [],
-				results = [],
-				matcher = compile( selector.replace( rtrim, "$1" ) );
-
-			return matcher[ expando ] ?
-				markFunction(function( seed, matches, context, xml ) {
-					var elem,
-						unmatched = matcher( seed, null, xml, [] ),
-						i = seed.length;
-
-					// Match elements unmatched by `matcher`
-					while ( i-- ) {
-						if ( (elem = unmatched[i]) ) {
-							seed[i] = !(matches[i] = elem);
-						}
-					}
-				}) :
-				function( elem, context, xml ) {
-					input[0] = elem;
-					matcher( input, null, xml, results );
-					return !results.pop();
-				};
-		}),
-
-		"has": markFunction(function( selector ) {
-			return function( elem ) {
-				return Sizzle( selector, elem ).length > 0;
-			};
-		}),
-
-		"contains": markFunction(function( text ) {
-			return function( elem ) {
-				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
-			};
-		}),
-
-		// "Whether an element is represented by a :lang() selector
-		// is based solely on the element's language value
-		// being equal to the identifier C,
-		// or beginning with the identifier C immediately followed by "-".
-		// The matching of C against the element's language value is performed case-insensitively.
-		// The identifier C does not have to be a valid language name."
-		// http://www.w3.org/TR/selectors/#lang-pseudo
-		"lang": markFunction( function( lang ) {
-			// lang value must be a valid identifier
-			if ( !ridentifier.test(lang || "") ) {
-				Sizzle.error( "unsupported lang: " + lang );
-			}
-			lang = lang.replace( runescape, funescape ).toLowerCase();
-			return function( elem ) {
-				var elemLang;
-				do {
-					if ( (elemLang = documentIsHTML ?
-						elem.lang :
-						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
-
-						elemLang = elemLang.toLowerCase();
-						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
-					}
-				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
-				return false;
-			};
-		}),
-
-		// Miscellaneous
-		"target": function( elem ) {
-			var hash = window.location && window.location.hash;
-			return hash && hash.slice( 1 ) === elem.id;
-		},
-
-		"root": function( elem ) {
-			return elem === docElem;
-		},
-
-		"focus": function( elem ) {
-			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
-		},
-
-		// Boolean properties
-		"enabled": function( elem ) {
-			return elem.disabled === false;
-		},
-
-		"disabled": function( elem ) {
-			return elem.disabled === true;
-		},
-
-		"checked": function( elem ) {
-			// In CSS3, :checked should return both checked and selected elements
-			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
-			var nodeName = elem.nodeName.toLowerCase();
-			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
-		},
-
-		"selected": function( elem ) {
-			// Accessing this property makes selected-by-default
-			// options in Safari work properly
-			if ( elem.parentNode ) {
-				elem.parentNode.selectedIndex;
-			}
-
-			return elem.selected === true;
-		},
-
-		// Contents
-		"empty": function( elem ) {
-			// http://www.w3.org/TR/selectors/#empty-pseudo
-			// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
-			//   not comment, processing instructions, or others
-			// Thanks to Diego Perini for the nodeName shortcut
-			//   Greater than "@" means alpha characters (specifically not starting with "#" or "?")
-			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
-				if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
-					return false;
-				}
-			}
-			return true;
-		},
-
-		"parent": function( elem ) {
-			return !Expr.pseudos["empty"]( elem );
-		},
-
-		// Element/input types
-		"header": function( elem ) {
-			return rheader.test( elem.nodeName );
-		},
-
-		"input": function( elem ) {
-			return rinputs.test( elem.nodeName );
-		},
-
-		"button": function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return name === "input" && elem.type === "button" || name === "button";
-		},
-
-		"text": function( elem ) {
-			var attr;
-			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
-			// use getAttribute instead to test this case
-			return elem.nodeName.toLowerCase() === "input" &&
-				elem.type === "text" &&
-				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
-		},
-
-		// Position-in-collection
-		"first": createPositionalPseudo(function() {
-			return [ 0 ];
-		}),
-
-		"last": createPositionalPseudo(function( matchIndexes, length ) {
-			return [ length - 1 ];
-		}),
-
-		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
-			return [ argument < 0 ? argument + length : argument ];
-		}),
-
-		"even": createPositionalPseudo(function( matchIndexes, length ) {
-			var i = 0;
-			for ( ; i < length; i += 2 ) {
-				matchIndexes.push( i );
-			}
-			return matchIndexes;
-		}),
-
-		"odd": createPositionalPseudo(function( matchIndexes, length ) {
-			var i = 1;
-			for ( ; i < length; i += 2 ) {
-				matchIndexes.push( i );
-			}
-			return matchIndexes;
-		}),
-
-		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
-			var i = argument < 0 ? argument + length : argument;
-			for ( ; --i >= 0; ) {
-				matchIndexes.push( i );
-			}
-			return matchIndexes;
-		}),
-
-		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
-			var i = argument < 0 ? argument + length : argument;
-			for ( ; ++i < length; ) {
-				matchIndexes.push( i );
-			}
-			return matchIndexes;
-		})
-	}
-};
-
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
-
-// Add button/input type pseudos
-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
-	Expr.pseudos[ i ] = createInputPseudo( i );
-}
-for ( i in { submit: true, reset: true } ) {
-	Expr.pseudos[ i ] = createButtonPseudo( i );
-}
-
-// Easy API for creating new setFilters
-function setFilters() {}
-setFilters.prototype = Expr.filters = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-function tokenize( selector, parseOnly ) {
-	var matched, match, tokens, type,
-		soFar, groups, preFilters,
-		cached = tokenCache[ selector + " " ];
-
-	if ( cached ) {
-		return parseOnly ? 0 : cached.slice( 0 );
-	}
-
-	soFar = selector;
-	groups = [];
-	preFilters = Expr.preFilter;
-
-	while ( soFar ) {
-
-		// Comma and first run
-		if ( !matched || (match = rcomma.exec( soFar )) ) {
-			if ( match ) {
-				// Don't consume trailing commas as valid
-				soFar = soFar.slice( match[0].length ) || soFar;
-			}
-			groups.push( tokens = [] );
-		}
-
-		matched = false;
-
-		// Combinators
-		if ( (match = rcombinators.exec( soFar )) ) {
-			matched = match.shift();
-			tokens.push({
-				value: matched,
-				// Cast descendant combinators to space
-				type: match[0].replace( rtrim, " " )
-			});
-			soFar = soFar.slice( matched.length );
-		}
-
-		// Filters
-		for ( type in Expr.filter ) {
-			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
-				(match = preFilters[ type ]( match ))) ) {
-				matched = match.shift();
-				tokens.push({
-					value: matched,
-					type: type,
-					matches: match
-				});
-				soFar = soFar.slice( matched.length );
-			}
-		}
-
-		if ( !matched ) {
-			break;
-		}
-	}
-
-	// Return the length of the invalid excess
-	// if we're just parsing
-	// Otherwise, throw an error or return tokens
-	return parseOnly ?
-		soFar.length :
-		soFar ?
-			Sizzle.error( selector ) :
-			// Cache the tokens
-			tokenCache( selector, groups ).slice( 0 );
-}
-
-function toSelector( tokens ) {
-	var i = 0,
-		len = tokens.length,
-		selector = "";
-	for ( ; i < len; i++ ) {
-		selector += tokens[i].value;
-	}
-	return selector;
-}
-
-function addCombinator( matcher, combinator, base ) {
-	var dir = combinator.dir,
-		checkNonElements = base && dir === "parentNode",
-		doneName = done++;
-
-	return combinator.first ?
-		// Check against closest ancestor/preceding element
-		function( elem, context, xml ) {
-			while ( (elem = elem[ dir ]) ) {
-				if ( elem.nodeType === 1 || checkNonElements ) {
-					return matcher( elem, context, xml );
-				}
-			}
-		} :
-
-		// Check against all ancestor/preceding elements
-		function( elem, context, xml ) {
-			var data, cache, outerCache,
-				dirkey = dirruns + " " + doneName;
-
-			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
-			if ( xml ) {
-				while ( (elem = elem[ dir ]) ) {
-					if ( elem.nodeType === 1 || checkNonElements ) {
-						if ( matcher( elem, context, xml ) ) {
-							return true;
-						}
-					}
-				}
-			} else {
-				while ( (elem = elem[ dir ]) ) {
-					if ( elem.nodeType === 1 || checkNonElements ) {
-						outerCache = elem[ expando ] || (elem[ expando ] = {});
-						if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
-							if ( (data = cache[1]) === true || data === cachedruns ) {
-								return data === true;
-							}
-						} else {
-							cache = outerCache[ dir ] = [ dirkey ];
-							cache[1] = matcher( elem, context, xml ) || cachedruns;
-							if ( cache[1] === true ) {
-								return true;
-							}
-						}
-					}
-				}
-			}
-		};
-}
-
-function elementMatcher( matchers ) {
-	return matchers.length > 1 ?
-		function( elem, context, xml ) {
-			var i = matchers.length;
-			while ( i-- ) {
-				if ( !matchers[i]( elem, context, xml ) ) {
-					return false;
-				}
-			}
-			return true;
-		} :
-		matchers[0];
-}
-
-function condense( unmatched, map, filter, context, xml ) {
-	var elem,
-		newUnmatched = [],
-		i = 0,
-		len = unmatched.length,
-		mapped = map != null;
-
-	for ( ; i < len; i++ ) {
-		if ( (elem = unmatched[i]) ) {
-			if ( !filter || filter( elem, context, xml ) ) {
-				newUnmatched.push( elem );
-				if ( mapped ) {
-					map.push( i );
-				}
-			}
-		}
-	}
-
-	return newUnmatched;
-}
-
-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
-	if ( postFilter && !postFilter[ expando ] ) {
-		postFilter = setMatcher( postFilter );
-	}
-	if ( postFinder && !postFinder[ expando ] ) {
-		postFinder = setMatcher( postFinder, postSelector );
-	}
-	return markFunction(function( seed, results, context, xml ) {
-		var temp, i, elem,
-			preMap = [],
-			postMap = [],
-			preexisting = results.length,
-
-			// Get initial elements from seed or context
-			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
-
-			// Prefilter to get matcher input, preserving a map for seed-results synchronization
-			matcherIn = preFilter && ( seed || !selector ) ?
-				condense( elems, preMap, preFilter, context, xml ) :
-				elems,
-
-			matcherOut = matcher ?
-				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
-				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-
-					// ...intermediate processing is necessary
-					[] :
-
-					// ...otherwise use results directly
-					results :
-				matcherIn;
-
-		// Find primary matches
-		if ( matcher ) {
-			matcher( matcherIn, matcherOut, context, xml );
-		}
-
-		// Apply postFilter
-		if ( postFilter ) {
-			temp = condense( matcherOut, postMap );
-			postFilter( temp, [], context, xml );
-
-			// Un-match failing elements by moving them back to matcherIn
-			i = temp.length;
-			while ( i-- ) {
-				if ( (elem = temp[i]) ) {
-					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
-				}
-			}
-		}
-
-		if ( seed ) {
-			if ( postFinder || preFilter ) {
-				if ( postFinder ) {
-					// Get the final matcherOut by condensing this intermediate into postFinder contexts
-					temp = [];
-					i = matcherOut.length;
-					while ( i-- ) {
-						if ( (elem = matcherOut[i]) ) {
-							// Restore matcherIn since elem is not yet a final match
-							temp.push( (matcherIn[i] = elem) );
-						}
-					}
-					postFinder( null, (matcherOut = []), temp, xml );
-				}
-
-				// Move matched elements from seed to results to keep them synchronized
-				i = matcherOut.length;
-				while ( i-- ) {
-					if ( (elem = matcherOut[i]) &&
-						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
-
-						seed[temp] = !(results[temp] = elem);
-					}
-				}
-			}
-
-		// Add elements to results, through postFinder if defined
-		} else {
-			matcherOut = condense(
-				matcherOut === results ?
-					matcherOut.splice( preexisting, matcherOut.length ) :
-					matcherOut
-			);
-			if ( postFinder ) {
-				postFinder( null, results, matcherOut, xml );
-			} else {
-				push.apply( results, matcherOut );
-			}
-		}
-	});
-}
-
-function matcherFromTokens( tokens ) {
-	var checkContext, matcher, j,
-		len = tokens.length,
-		leadingRelative = Expr.relative[ tokens[0].type ],
-		implicitRelative = leadingRelative || Expr.relative[" "],
-		i = leadingRelative ? 1 : 0,
-
-		// The foundational matcher ensures that elements are reachable from top-level context(s)
-		matchContext = addCombinator( function( elem ) {
-			return elem === checkContext;
-		}, implicitRelative, true ),
-		matchAnyContext = addCombinator( function( elem ) {
-			return indexOf.call( checkContext, elem ) > -1;
-		}, implicitRelative, true ),
-		matchers = [ function( elem, context, xml ) {
-			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
-				(checkContext = context).nodeType ?
-					matchContext( elem, context, xml ) :
-					matchAnyContext( elem, context, xml ) );
-		} ];
-
-	for ( ; i < len; i++ ) {
-		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
-			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
-		} else {
-			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
-
-			// Return special upon seeing a positional matcher
-			if ( matcher[ expando ] ) {
-				// Find the next relative operator (if any) for proper handling
-				j = ++i;
-				for ( ; j < len; j++ ) {
-					if ( Expr.relative[ tokens[j].type ] ) {
-						break;
-					}
-				}
-				return setMatcher(
-					i > 1 && elementMatcher( matchers ),
-					i > 1 && toSelector(
-						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
-						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
-					).replace( rtrim, "$1" ),
-					matcher,
-					i < j && matcherFromTokens( tokens.slice( i, j ) ),
-					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
-					j < len && toSelector( tokens )
-				);
-			}
-			matchers.push( matcher );
-		}
-	}
-
-	return elementMatcher( matchers );
-}
-
-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
-	// A counter to specify which element is currently being matched
-	var matcherCachedRuns = 0,
-		bySet = setMatchers.length > 0,
-		byElement = elementMatchers.length > 0,
-		superMatcher = function( seed, context, xml, results, expandContext ) {
-			var elem, j, matcher,
-				setMatched = [],
-				matchedCount = 0,
-				i = "0",
-				unmatched = seed && [],
-				outermost = expandContext != null,
-				contextBackup = outermostContext,
-				// We must always have either seed elements or context
-				elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
-				// Use integer dirruns iff this is the outermost matcher
-				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
-
-			if ( outermost ) {
-				outermostContext = context !== document && context;
-				cachedruns = matcherCachedRuns;
-			}
-
-			// Add elements passing elementMatchers directly to results
-			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
-			for ( ; (elem = elems[i]) != null; i++ ) {
-				if ( byElement && elem ) {
-					j = 0;
-					while ( (matcher = elementMatchers[j++]) ) {
-						if ( matcher( elem, context, xml ) ) {
-							results.push( elem );
-							break;
-						}
-					}
-					if ( outermost ) {
-						dirruns = dirrunsUnique;
-						cachedruns = ++matcherCachedRuns;
-					}
-				}
-
-				// Track unmatched elements for set filters
-				if ( bySet ) {
-					// They will have gone through all possible matchers
-					if ( (elem = !matcher && elem) ) {
-						matchedCount--;
-					}
-
-					// Lengthen the array for every element, matched or not
-					if ( seed ) {
-						unmatched.push( elem );
-					}
-				}
-			}
-
-			// Apply set filters to unmatched elements
-			matchedCount += i;
-			if ( bySet && i !== matchedCount ) {
-				j = 0;
-				while ( (matcher = setMatchers[j++]) ) {
-					matcher( unmatched, setMatched, context, xml );
-				}
-
-				if ( seed ) {
-					// Reintegrate element matches to eliminate the need for sorting
-					if ( matchedCount > 0 ) {
-						while ( i-- ) {
-							if ( !(unmatched[i] || setMatched[i]) ) {
-								setMatched[i] = pop.call( results );
-							}
-						}
-					}
-
-					// Discard index placeholder values to get only actual matches
-					setMatched = condense( setMatched );
-				}
-
-				// Add matches to results
-				push.apply( results, setMatched );
-
-				// Seedless set matches succeeding multiple successful matchers stipulate sorting
-				if ( outermost && !seed && setMatched.length > 0 &&
-					( matchedCount + setMatchers.length ) > 1 ) {
-
-					Sizzle.uniqueSort( results );
-				}
-			}
-
-			// Override manipulation of globals by nested matchers
-			if ( outermost ) {
-				dirruns = dirrunsUnique;
-				outermostContext = contextBackup;
-			}
-
-			return unmatched;
-		};
-
-	return bySet ?
-		markFunction( superMatcher ) :
-		superMatcher;
-}
-
-compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
-	var i,
-		setMatchers = [],
-		elementMatchers = [],
-		cached = compilerCache[ selector + " " ];
-
-	if ( !cached ) {
-		// Generate a function of recursive functions that can be used to check each element
-		if ( !group ) {
-			group = tokenize( selector );
-		}
-		i = group.length;
-		while ( i-- ) {
-			cached = matcherFromTokens( group[i] );
-			if ( cached[ expando ] ) {
-				setMatchers.push( cached );
-			} else {
-				elementMatchers.push( cached );
-			}
-		}
-
-		// Cache the compiled function
-		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
-	}
-	return cached;
-};
-
-function multipleContexts( selector, contexts, results ) {
-	var i = 0,
-		len = contexts.length;
-	for ( ; i < len; i++ ) {
-		Sizzle( selector, contexts[i], results );
-	}
-	return results;
-}
-
-function select( selector, context, results, seed ) {
-	var i, tokens, token, type, find,
-		match = tokenize( selector );
-
-	if ( !seed ) {
-		// Try to minimize operations if there is only one group
-		if ( match.length === 1 ) {
-
-			// Take a shortcut and set the context if the root selector is an ID
-			tokens = match[0] = match[0].slice( 0 );
-			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
-					support.getById && context.nodeType === 9 && documentIsHTML &&
-					Expr.relative[ tokens[1].type ] ) {
-
-				context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
-				if ( !context ) {
-					return results;
-				}
-				selector = selector.slice( tokens.shift().value.length );
-			}
-
-			// Fetch a seed set for right-to-left matching
-			i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
-			while ( i-- ) {
-				token = tokens[i];
-
-				// Abort if we hit a combinator
-				if ( Expr.relative[ (type = token.type) ] ) {
-					break;
-				}
-				if ( (find = Expr.find[ type ]) ) {
-					// Search, expanding context for leading sibling combinators
-					if ( (seed = find(
-						token.matches[0].replace( runescape, funescape ),
-						rsibling.test( tokens[0].type ) && context.parentNode || context
-					)) ) {
-
-						// If seed is empty or no tokens remain, we can return early
-						tokens.splice( i, 1 );
-						selector = seed.length && toSelector( tokens );
-						if ( !selector ) {
-							push.apply( results, seed );
-							return results;
-						}
-
-						break;
-					}
-				}
-			}
-		}
-	}
-
-	// Compile and execute a filtering function
-	// Provide `match` to avoid retokenization if we modified the selector above
-	compile( selector, match )(
-		seed,
-		context,
-		!documentIsHTML,
-		results,
-		rsibling.test( selector )
-	);
-	return results;
-}
-
-// One-time assignments
-
-// Sort stability
-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
-
-// Support: Chrome<14
-// Always assume duplicates if they aren't passed to the comparison function
-support.detectDuplicates = hasDuplicate;
-
-// Initialize against the default document
-setDocument();
-
-// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
-// Detached nodes confoundingly follow *each other*
-support.sortDetached = assert(function( div1 ) {
-	// Should return 1, but returns 4 (following)
-	return div1.compareDocumentPosition( document.createElement("div") ) & 1;
-});
-
-// Support: IE<8
-// Prevent attribute/property "interpolation"
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !assert(function( div ) {
-	div.innerHTML = "<a href='#'></a>";
-	return div.firstChild.getAttribute("href") === "#" ;
-}) ) {
-	addHandle( "type|href|height|width", function( elem, name, isXML ) {
-		if ( !isXML ) {
-			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
-		}
-	});
-}
-
-// Support: IE<9
-// Use defaultValue in place of getAttribute("value")
-if ( !support.attributes || !assert(function( div ) {
-	div.innerHTML = "<input/>";
-	div.firstChild.setAttribute( "value", "" );
-	return div.firstChild.getAttribute( "value" ) === "";
-}) ) {
-	addHandle( "value", function( elem, name, isXML ) {
-		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
-			return elem.defaultValue;
-		}
-	});
-}
-
-// Support: IE<9
-// Use getAttributeNode to fetch booleans when getAttribute lies
-if ( !assert(function( div ) {
-	return div.getAttribute("disabled") == null;
-}) ) {
-	addHandle( booleans, function( elem, name, isXML ) {
-		var val;
-		if ( !isXML ) {
-			return (val = elem.getAttributeNode( name )) && val.specified ?
-				val.value :
-				elem[ name ] === true ? name.toLowerCase() : null;
-		}
-	});
-}
-
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.pseudos;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-})( window );
-// String to Object options format cache
-var optionsCache = {};
-
-// Convert String-formatted options into Object-formatted ones and store in cache
-function createOptions( options ) {
-	var object = optionsCache[ options ] = {};
-	jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
-		object[ flag ] = true;
-	});
-	return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- *	options: an optional list of space-separated options that will change how
- *			the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- *	once:			will ensure the callback list can only be fired once (like a Deferred)
- *
- *	memory:			will keep track of previous values and will call any callback added
- *					after the list has been fired right away with the latest "memorized"
- *					values (like a Deferred)
- *
- *	unique:			will ensure a callback can only be added once (no duplicate in the list)
- *
- *	stopOnFalse:	interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( options ) {
-
-	// Convert options from String-formatted to Object-formatted if needed
-	// (we check in cache first)
-	options = typeof options === "string" ?
-		( optionsCache[ options ] || createOptions( options ) ) :
-		jQuery.extend( {}, options );
-
-	var // Last fire value (for non-forgettable lists)
-		memory,
-		// Flag to know if list was already fired
-		fired,
-		// Flag to know if list is currently firing
-		firing,
-		// First callback to fire (used internally by add and fireWith)
-		firingStart,
-		// End of the loop when firing
-		firingLength,
-		// Index of currently firing callback (modified by remove if needed)
-		firingIndex,
-		// Actual callback list
-		list = [],
-		// Stack of fire calls for repeatable lists
-		stack = !options.once && [],
-		// Fire callbacks
-		fire = function( data ) {
-			memory = options.memory && data;
-			fired = true;
-			firingIndex = firingStart || 0;
-			firingStart = 0;
-			firingLength = list.length;
-			firing = true;
-			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
-				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
-					memory = false; // To prevent further calls using add
-					break;
-				}
-			}
-			firing = false;
-			if ( list ) {
-				if ( stack ) {
-					if ( stack.length ) {
-						fire( stack.shift() );
-					}
-				} else if ( memory ) {
-					list = [];
-				} else {
-					self.disable();
-				}
-			}
-		},
-		// Actual Callbacks object
-		self = {
-			// Add a callback or a collection of callbacks to the list
-			add: function() {
-				if ( list ) {
-					// First, we save the current length
-					var start = list.length;
-					(function add( args ) {
-						jQuery.each( args, function( _, arg ) {
-							var type = jQuery.type( arg );
-							if ( type === "function" ) {
-								if ( !options.unique || !self.has( arg ) ) {
-									list.push( arg );
-								}
-							} else if ( arg && arg.length && type !== "string" ) {
-								// Inspect recursively
-								add( arg );
-							}
-						});
-					})( arguments );
-					// Do we need to add the callbacks to the
-					// current firing batch?
-					if ( firing ) {
-						firingLength = list.length;
-					// With memory, if we're not firing then
-					// we should call right away
-					} else if ( memory ) {
-						firingStart = start;
-						fire( memory );
-					}
-				}
-				return this;
-			},
-			// Remove a callback from the list
-			remove: function() {
-				if ( list ) {
-					jQuery.each( arguments, function( _, arg ) {
-						var index;
-						while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
-							list.splice( index, 1 );
-							// Handle firing indexes
-							if ( firing ) {
-								if ( index <= firingLength ) {
-									firingLength--;
-								}
-								if ( index <= firingIndex ) {
-									firingIndex--;
-								}
-							}
-						}
-					});
-				}
-				return this;
-			},
-			// Check if a given callback is in the list.
-			// If no argument is given, return whether or not list has callbacks attached.
-			has: function( fn ) {
-				return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
-			},
-			// Remove all callbacks from the list
-			empty: function() {
-				list = [];
-				firingLength = 0;
-				return this;
-			},
-			// Have the list do nothing anymore
-			disable: function() {
-				list = stack = memory = undefined;
-				return this;
-			},
-			// Is it disabled?
-			disabled: function() {
-				return !list;
-			},
-			// Lock the list in its current state
-			lock: function() {
-				stack = undefined;
-				if ( !memory ) {
-					self.disable();
-				}
-				return this;
-			},
-			// Is it locked?
-			locked: function() {
-				return !stack;
-			},
-			// Call all callbacks with the given context and arguments
-			fireWith: function( context, args ) {
-				if ( list && ( !fired || stack ) ) {
-					args = args || [];
-					args = [ context, args.slice ? args.slice() : args ];
-					if ( firing ) {
-						stack.push( args );
-					} else {
-						fire( args );
-					}
-				}
-				return this;
-			},
-			// Call all the callbacks with the given arguments
-			fire: function() {
-				self.fireWith( this, arguments );
-				return this;
-			},
-			// To know if the callbacks have already been called at least once
-			fired: function() {
-				return !!fired;
-			}
-		};
-
-	return self;
-};
-jQuery.extend({
-
-	Deferred: function( func ) {
-		var tuples = [
-				// action, add listener, listener list, final state
-				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
-				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
-				[ "notify", "progress", jQuery.Callbacks("memory") ]
-			],
-			state = "pending",
-			promise = {
-				state: function() {
-					return state;
-				},
-				always: function() {
-					deferred.done( arguments ).fail( arguments );
-					return this;
-				},
-				then: function( /* fnDone, fnFail, fnProgress */ ) {
-					var fns = arguments;
-					return jQuery.Deferred(function( newDefer ) {
-						jQuery.each( tuples, function( i, tuple ) {
-							var action = tuple[ 0 ],
-								fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
-							// deferred[ done | fail | progress ] for forwarding actions to newDefer
-							deferred[ tuple[1] ](function() {
-								var returned = fn && fn.apply( this, arguments );
-								if ( returned && jQuery.isFunction( returned.promise ) ) {
-									returned.promise()
-										.done( newDefer.resolve )
-										.fail( newDefer.reject )
-										.progress( newDefer.notify );
-								} else {
-									newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
-								}
-							});
-						});
-						fns = null;
-					}).promise();
-				},
-				// Get a promise for this deferred
-				// If obj is provided, the promise aspect is added to the object
-				promise: function( obj ) {
-					return obj != null ? jQuery.extend( obj, promise ) : promise;
-				}
-			},
-			deferred = {};
-
-		// Keep pipe for back-compat
-		promise.pipe = promise.then;
-
-		// Add list-specific methods
-		jQuery.each( tuples, function( i, tuple ) {
-			var list = tuple[ 2 ],
-				stateString = tuple[ 3 ];
-
-			// promise[ done | fail | progress ] = list.add
-			promise[ tuple[1] ] = list.add;
-
-			// Handle state
-			if ( stateString ) {
-				list.add(function() {
-					// state = [ resolved | rejected ]
-					state = stateString;
-
-				// [ reject_list | resolve_list ].disable; progress_list.lock
-				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
-			}
-
-			// deferred[ resolve | reject | notify ]
-			deferred[ tuple[0] ] = function() {
-				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
-				return this;
-			};
-			deferred[ tuple[0] + "With" ] = list.fireWith;
-		});
-
-		// Make the deferred a promise
-		promise.promise( deferred );
-
-		// Call given func if any
-		if ( func ) {
-			func.call( deferred, deferred );
-		}
-
-		// All done!
-		return deferred;
-	},
-
-	// Deferred helper
-	when: function( subordinate /* , ..., subordinateN */ ) {
-		var i = 0,
-			resolveValues = core_slice.call( arguments ),
-			length = resolveValues.length,
-
-			// the count of uncompleted subordinates
-			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
-
-			// the master Deferred. If resolveV

<TRUNCATED>

[26/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/styles/app.less
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/styles/app.less b/contrib/views/slider/src/main/resources/ui/app/styles/app.less
deleted file mode 100644
index a8eecc8..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/styles/app.less
+++ /dev/null
@@ -1,303 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-@import-once 'common.less';
-
-.app-page {
-  .wrap-tabs {
-    margin-top: 30px;
-  }
-  .quick-links-wrapper {
-    .nav-pills.move {
-      float: right;
-      width:135px;
-      &>li {
-        position: absolute;
-      }
-    }
-    .dropdown-submenu {
-      &> a:after {
-        border-left-color: #333;
-      }
-    }
-    .nav li.dropdown.open {
-      .dropdown-toggle{
-        color: #005580;
-        background-color: #eeeeee;
-        border-color: #eeeeee;
-        -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-        -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-        box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-      }
-      a:hover .caret {
-        border-top-color: #005580;
-        border-bottom-color: #005580;
-      }
-      .caret {
-        border-top-color: #005580;
-        border-bottom-color: #005580;
-      }
-    }
-  }
-}
-
-.app_summary {
-  padding-left: 0;
-  table {
-    &.no-borders {
-      td {
-        border-width: 0;
-      }
-    }
-    td:nth-child(2) span{
-      word-break: break-all;
-    }
-  }
-  .panel-heading {
-    font-weight: 700;
-  }
-  .panel-summary {
-    min-height: 400px;
-    td:first-child {
-      text-align: right;
-    }
-  }
-  .panel-components {
-    .status {
-      display: inline-block;
-      width: 25px;
-    }
-    .icon-ok-sign {
-      color: #5ab400;
-    }
-    .icon-warning-sign {
-      color: #ff0000;
-    }
-    .panel-body {
-      overflow-y: auto;
-    }
-  }
-  .panel-link {
-    margin-top: -5px;
-    margin-right: -7px;
-  }
-  .column-left {
-    padding-left: 0;
-  }
-  .column-right {
-    padding-right: 0;
-  }
-}
-
-.chart-container {
-  cursor: default;
-
-  position: relative;
-  margin: 20px 15px 0px 15px;
-
-  .chart {
-    position: relative;
-    z-index: 1;
-  }
-  .chart-y-axis {
-    position: absolute;
-    top: 0;
-    bottom: 0px;
-    width: 100px;
-    z-index: 2;
-    margin-top: 15px;
-  }
-  .chart-x-axis {
-    position: absolute;
-    top: 180px;
-    left: 35%;
-    width: 30%;
-    z-index: 2;
-  }
-  .x_tick {
-    margin-top: 5px;
-    .title {
-      padding: 0 2px 0 2px;
-      opacity: 1 !important;
-      top: 148px;
-    }
-  }
-  svg {
-    g {
-      g:nth-child(1) {
-        display: none;
-      }
-    }
-  }
-  text {
-    font-weight: 700;
-    opacity: 1 !important;
-  }
-  .chart-legend {
-    font-family: 'Courier New';
-    position: absolute;
-    top: 180px;
-    z-index: 3;
-  }
-  .rickshaw_legend {
-    background-color: #999 !important;
-    li:hover {
-      background-color: #999 !important;
-    }
-  }
-  .rickshaw_legend:empty {
-    padding: 0;
-  }
-  .rickshaw_graph {
-    .x_tick {
-      .title {
-        bottom: -6px;
-        opacity: 0.75;
-      }
-    }
-  }
-  .chart-overlay {
-    position: absolute;
-    top: 0;
-    bottom: 0;
-    width: 100%;
-    z-index: 5;
-  }
-  .chart-title {
-    text-align: center;
-    margin-top: 20px;
-  }
-}
-
-.app_configs {
-  a.accordion-toggle {
-    display: block;
-  }
-  .panel-heading{
-    .icon{
-      width: 24px;
-    }
-  }
-  .row {
-    .table-row();
-    textarea {
-      height: 200px;
-      padding-left: 5px;
-      padding-right: 5px;
-      resize: none;
-    }
-    textarea[disabled] {
-      cursor: not-allowed;
-      background-color: #eeeeee;
-    }
-    input[disabled] {
-      cursor: not-allowed;
-      background-color: #eeeeee;
-    }
-    .property-name {
-      word-wrap: break-word;
-    }
-  }
-}
-
-.app-alerts {
-  overflow-y: auto;
-  ul {
-    padding-left: 0;
-    margin-bottom: 0;
-  }
-  li {
-    border-bottom: 1px solid #eee;
-    list-style: none;
-    padding: 5px;
-    background-position: 14px 9px;
-    background-repeat: no-repeat;
-    .date-time {
-      float: right;
-    }
-    p {
-      margin-bottom: 2px;
-    }
-    .container-fluid {
-      padding-left: 10px;
-      padding-right: 10px;
-    }
-    .title {
-      font-weight: normal;
-      font-size: 13px;
-    }
-    .row-fluid [class*="span"] {
-      min-height: 0px;
-    }
-    .date-time {
-      color: #999;
-      font-style: italic;
-      font-size: small;
-      text-align: right;
-    }
-    .message {
-      font-size: 12px;
-      color: #777;
-      word-break: break-all;
-      padding-right: 15px;
-    }
-    .serviceLink {
-      padding-left: 7px;
-    }
-  }
-  .icon-ok {
-    color: #5AB400;
-  }
-  .icon-remove {
-    color: #FF4B4B;
-  }
-  .icon-warning-sign {
-    color: #FDB82F;
-  }
-  .icon-question-sign {
-    color: #999;
-  }
-}
-
-.flex-popup {
-  .component-label {
-    line-height: 28px;
-  }
-}
-
-.view-user {
-  line-height: 34px;
-  padding-right: 10px;
-}
-
-.btn-primary {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #006dcc;
-  *background-color: #0044cc;
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
-  background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
-  background-image: -o-linear-gradient(top, #0088cc, #0044cc);
-  background-image: linear-gradient(to bottom, #0088cc, #0044cc);
-  background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
-  background-repeat: repeat-x;
-  border-color: #0044cc #0044cc #002a80;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
-  filter: progid:dximagetransform.microsoft.gradient(enabled=false);
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/styles/application.less
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/styles/application.less b/contrib/views/slider/src/main/resources/ui/app/styles/application.less
deleted file mode 100644
index 71b537e..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/styles/application.less
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-@import 'common.less';
-@import 'old-bootstrap.less';
-@import 'wizard.less';
-@import 'apps-table.less';
-@import 'app.less';

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/styles/application.styl
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/styles/application.styl b/contrib/views/slider/src/main/resources/ui/app/styles/application.styl
deleted file mode 100755
index a1a9008..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/styles/application.styl
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-@import 'nib'

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/styles/apps-table.less
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/styles/apps-table.less b/contrib/views/slider/src/main/resources/ui/app/styles/apps-table.less
deleted file mode 100644
index 928cf1f..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/styles/apps-table.less
+++ /dev/null
@@ -1,320 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#slider-apps-table  {
-
-  #slider-table {
-    border-bottom: 1px solid #ddd;
-    border-left: 1px solid #ddd;
-    border-right: 1px solid #ddd;
-    margin-top: 10px;
-    margin-bottom: 10px;
-    font-size: 13px\9;
-    table-layout: fixed;
-
-    th {
-      width: 17.5%!important;
-    }
-
-    select {
-      height: 23px;
-      margin-bottom: 10px;
-      font-size: 75%;
-    }
-
-    .label-row {
-      font-size: 0.9em;
-      th {
-        padding: 4px;
-        border-bottom: none !important;
-      }
-      .active-sort {
-        color: #555555;
-        text-decoration: none;
-        background-color: #e5e5e5;
-        -webkit-box-shadow: inset 0 5px 8px rgba(0, 0, 0, 0.100);
-        -moz-box-shadow: inset 0 5px 8px rgba(0, 0, 0, 0.100);
-        box-shadow: inset 0 5px 8px rgba(0, 0, 0, 0.100);
-      }
-    }
-
-    #filter-row {
-      th {
-        padding: 0 0 0 4px;
-      }
-      .active-filter {
-        color: #555555;
-        text-decoration: none;
-        background-color: #e5e5e5;
-        -webkit-box-shadow: inset 0 -5px 8px rgba(0, 0, 0, 0.05);
-        -moz-box-shadow: inset 0 -5px 8px rgba(0, 0, 0, 0.05);
-        box-shadow: inset 0 -5px 8px rgba(0, 0, 0, 0.05);
-      }
-      input {
-        font-size: 12px;
-        height: 24px;
-        margin-bottom: 10px;
-      }
-      .filter-btn {
-        color: #999999;
-        font-size: 12px;
-        line-height: 14px;
-        padding-left: 6px;
-        text-align: left;
-        width: 100px;
-        .icon-filter {
-          color: #999999;
-        }
-      }
-    }
-    thead {
-      background: none repeat scroll 0 0 #F8F8F8;
-      border-top: 1px solid #ddd;
-    }
-  }
-  .page-bar {
-    border: 1px solid #E4E4E4;
-    color: #7B7B7B;
-    text-align: right;
-    font-size: 12px;
-    label {
-      font-size: 12px;
-      font-weight: normal;
-    }
-    div {
-      display: inline-block;
-      margin:0 10px;
-    }
-    .filtered-hosts-info, .selected-hosts-info {
-      float: left;
-      text-align: left;
-      margin-top: 8px;
-      margin-left: 17px;
-    }
-    .items-on-page {
-      label {
-        display:inline;
-      }
-      select {
-        margin-bottom: 4px;
-        margin-top: 4px;
-        width:70px;
-        font-size: 12px;
-        height: 27px;
-        padding: 4px 6px;
-      }
-    }
-    .paging_two_button {
-      a.paginate_disabled_next, a.paginate_disabled_previous {
-        color: gray;
-        &:hover {
-          color: gray;
-          text-decoration: none;
-          cursor: default;
-        }
-      }
-
-      a.paginate_next, a.paginate_previous {
-        &:hover {
-          text-decoration: none;
-          cursor: pointer;
-        }
-      }
-      a {
-        padding:0 5px;
-      }
-    }
-  }
-  .box-header {
-    margin-left: 0;
-    .btn-group {
-      float: left;
-    }
-    .btn.decommission {
-      margin-left: 5px;
-    }
-    .btn.add-host-button {
-      margin-bottom: 10px;
-      margin-top: -5px;
-    }
-    .hosts-actions {
-      margin-right: 10px;
-    }
-    .health-status-bar {
-      font-size: 0.9em;
-      margin-left: 0;
-      color: #b4b4b4;
-      a {
-        text-decoration: none;
-      }
-      .category-item:hover {
-        cursor: pointer;
-        a {
-          color: #ffffff;
-        }
-      }
-      .active {
-        a {
-          color: #ffffff;
-        }
-        background-color: #888888;
-        border-color: #888888;
-        -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.25);
-        -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.25);
-        box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.25);
-      }
-      .category-item.active:hover {
-        a {
-          color: #ffffff;
-        }
-      }
-    }
-  }
-
-  .filter-input-width{
-    width:68%;
-    font-weight: normal;
-  }
-  .table {
-
-    thead {
-      tr {
-        th {
-          border-bottom: none;
-        }
-      }
-    }
-
-    table-layout: fixed;
-    th {
-      border-top: none;
-    }
-    th, td {
-      padding-left: 4px;
-      padding-right: 4px;
-      border-left-width: 0;
-    }
-    input[type="checkbox"] {
-      margin: -2px 0 0 0;
-    }
-
-    .sorting_asc {
-      background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAKQWlDQ1BJQ0MgUHJvZmlsZQAASA2dlndUU9kWh8+9N73QEiIgJfQaegkg0jtIFQRRiUmAUAKGhCZ2RAVGFBEpVmRUwAFHhyJjRRQLg4Ji1wnyEFDGwVFEReXdjGsJ7601896a/cdZ39nnt9fZZ+9917oAUPyCBMJ0WAGANKFYFO7rwVwSE8vE9wIYEAEOWAHA4WZmBEf4RALU/L09mZmoSMaz9u4ugGS72yy/UCZz1v9/kSI3QyQGAApF1TY8fiYX5QKUU7PFGTL/BMr0lSkyhjEyFqEJoqwi48SvbPan5iu7yZiXJuShGlnOGbw0noy7UN6aJeGjjAShXJgl4GejfAdlvVRJmgDl9yjT0/icTAAwFJlfzOcmoWyJMkUUGe6J8gIACJTEObxyDov5OWieAHimZ+SKBIlJYqYR15hp5ejIZvrxs1P5YjErlMNN4Yh4TM/0tAyOMBeAr2+WRQElWW2ZaJHtrRzt7VnW5mj5v9nfHn5T/T3IevtV8Sbsz55BjJ5Z32zsrC+9FgD2JFqbHbO+lVUAtG0GQOXhrE/vIADyBQC03pzzHoZsXpLE4gwnC4vs7GxzAZ9rLivoN/ufgm/Kv4Y595nL7vtWO6YXP4EjSRUzZUXlpqemS0TMzAwOl89k/fcQ/+PAOWnNycMsnJ/AF/GF6FVR6JQJhIlou4U8gViQLmQKhH/V4X8YNicHGX6daxRodV8AfYU5ULhJB8hvPQBDIwMkbj96An3rWxAxCsi+vGitka9zjzJ6/uf6Hwtcim7hTEEiU+b2DI9kciWiLBmj34RswQISkAd0oAo0gS4wAixgDRyAM3AD3iAAhIBIEAOWAy5IAmlABLJBPtgACkEx2AF2g2pwANSBetAEToI2cAZcBFfADXALDIBHQAqGwUswA
 d6BaQiC8BAVokGqkBakD5lC1hAbWgh5Q0FQOBQDxUOJkBCSQPnQJqgYKoOqoUNQPfQjdBq6CF2D+qAH0CA0Bv0BfYQRmALTYQ3YALaA2bA7HAhHwsvgRHgVnAcXwNvhSrgWPg63whfhG/AALIVfwpMIQMgIA9FGWAgb8URCkFgkAREha5EipAKpRZqQDqQbuY1IkXHkAwaHoWGYGBbGGeOHWYzhYlZh1mJKMNWYY5hWTBfmNmYQM4H5gqVi1bGmWCesP3YJNhGbjS3EVmCPYFuwl7ED2GHsOxwOx8AZ4hxwfrgYXDJuNa4Etw/XjLuA68MN4SbxeLwq3hTvgg/Bc/BifCG+Cn8cfx7fjx/GvyeQCVoEa4IPIZYgJGwkVBAaCOcI/YQRwjRRgahPdCKGEHnEXGIpsY7YQbxJHCZOkxRJhiQXUiQpmbSBVElqIl0mPSa9IZPJOmRHchhZQF5PriSfIF8lD5I/UJQoJhRPShxFQtlOOUq5QHlAeUOlUg2obtRYqpi6nVpPvUR9Sn0vR5Mzl/OX48mtk6uRa5Xrl3slT5TXl3eXXy6fJ18hf0r+pvy4AlHBQMFTgaOwVqFG4bTCPYVJRZqilWKIYppiiWKD4jXFUSW8koGStxJPqUDpsNIlpSEaQtOledK4tE20Otpl2jAdRzek+9OT6cX0H+i99AllJWVb5SjlHOUa5bPKUgbCMGD4M1IZpYyTjLuMj/M05rnP48/bNq9pXv+8KZX5Km4qfJUilWaVAZWPqkxVb9UU1Z2qbapP1DBqJmphatlq+9Uuq43Pp893ns+dXzT/5PyH6rC6iXq4+mr1w+o96pMamhq+GhkaVRqXNMY1GZpumsma5ZrnNMe0aFoLtQRa5VrntV4wlZnuzFRmJbOLOaGtru2nLdE+pN2rPa1jqLNYZ6NOs84TXZIuWzdBt1y3U3dCT0svWC9fr1HvoT5Rn62fpL9Hv1t/ysDQINpgi0GbwaihiqG/YZ5ho+
 FjI6qRq9Eqo1qjO8Y4Y7ZxivE+41smsImdSZJJjclNU9jU3lRgus+0zwxr5mgmNKs1u8eisNxZWaxG1qA5wzzIfKN5m/krCz2LWIudFt0WXyztLFMt6ywfWSlZBVhttOqw+sPaxJprXWN9x4Zq42Ozzqbd5rWtqS3fdr/tfTuaXbDdFrtOu8/2DvYi+yb7MQc9h3iHvQ732HR2KLuEfdUR6+jhuM7xjOMHJ3snsdNJp9+dWc4pzg3OowsMF/AX1C0YctFx4bgccpEuZC6MX3hwodRV25XjWuv6zE3Xjed2xG3E3dg92f24+ysPSw+RR4vHlKeT5xrPC16Il69XkVevt5L3Yu9q76c+Oj6JPo0+E752vqt9L/hh/QL9dvrd89fw5/rX+08EOASsCegKpARGBFYHPgsyCRIFdQTDwQHBu4IfL9JfJFzUFgJC/EN2hTwJNQxdFfpzGC4sNKwm7Hm4VXh+eHcELWJFREPEu0iPyNLIR4uNFksWd0bJR8VF1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7JHZyqffS3UuH4+ziCuPuLjNclrPs2nK15anLz66QX8FZcSoeGx8d3xD/iRPCqeVMrvRfuXflBNeTu4f7kufGK+eN8V34ZfyRBJeEsoTRRJfEXYljSa5JFUnjAk9BteB1sl/ygeSplJCUoykzqdGpzWmEtPi000IlYYqwK10zPSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruYjv5M9UiMJJslg1kLs2qy3mdHZZ/KUcwR5vTkmuRuyx3J88n7fjVmNXd1Z752/ob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41lG99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrblyJe0fViy+KK4k8l3JLr31l9V/ndzPaE7b2l9qX7d+B2CHfc3em681iZYlle2dCu4F2t5czyovK3u1fsvlZhW3F
 gD2mPZI+0MqiyvUqvakfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/TAY0DxQc+HhQcvH/I91BrrUFtxWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XHwo911TvU1zeoN5Q2wo2SxrHjccdv/eD1Q3sTq+lQM6O5+AQ4ITnx4sf4H++eDDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3OHS0/m/989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTSna6wrt7LgZevXvG5cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56WX+x+aem172296XCz/ZbjrY6+BX3n+l37L972un3ljv+dGwOLBvruLr57/17cPel93v3RB6kPXj/Mejj9aP1j7OOiJwpPKp6qP6391fjXZqm99Oyg12DPs4hnj4a4Qy//lfmvT8MFz6nPK0a0RupHrUfPjPmM3Xqx9MXwy4yX0+OFvyn+tveV0auffnf7vWdiycTwa9HrmT9K3qi+OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4T5WfjT93fAn88ngmbWbm3/eE8/syOll+AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA4klEQVQ4Ee2RPw8BQRDF3x4dCokL0SqUKqVSr/ZRruWTaEnUWgkShwji3yWCwoXQOCKCHXPq24hSmGJ3srvz5vdmga8NIhK1GhW2B8q+M+F/96DRRHE0hUEagegUEyK4VdVoqgv3fL2h3HAMQ3I+sQDLCpRdUlWNUux8prjZltXTRUIQ4X4T6HSRcRwkPxLj7r7ZHPXFSgO7A3xgwQfsncRghJKKzpPMPiBv9pBwDQmhgaTgnRU5zD7S86U3necH2CtQJIyKHkWKyXTGCrFZh4XtxxWt4x6eda9u/+U/gZ+dwBODrVwv7HA8iwAAAABJRU5ErkJggg==) no-repeat right 50
 %;
-    }
-    .sorting_desc {
-      background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAKQWlDQ1BJQ0MgUHJvZmlsZQAASA2dlndUU9kWh8+9N73QEiIgJfQaegkg0jtIFQRRiUmAUAKGhCZ2RAVGFBEpVmRUwAFHhyJjRRQLg4Ji1wnyEFDGwVFEReXdjGsJ7601896a/cdZ39nnt9fZZ+9917oAUPyCBMJ0WAGANKFYFO7rwVwSE8vE9wIYEAEOWAHA4WZmBEf4RALU/L09mZmoSMaz9u4ugGS72yy/UCZz1v9/kSI3QyQGAApF1TY8fiYX5QKUU7PFGTL/BMr0lSkyhjEyFqEJoqwi48SvbPan5iu7yZiXJuShGlnOGbw0noy7UN6aJeGjjAShXJgl4GejfAdlvVRJmgDl9yjT0/icTAAwFJlfzOcmoWyJMkUUGe6J8gIACJTEObxyDov5OWieAHimZ+SKBIlJYqYR15hp5ejIZvrxs1P5YjErlMNN4Yh4TM/0tAyOMBeAr2+WRQElWW2ZaJHtrRzt7VnW5mj5v9nfHn5T/T3IevtV8Sbsz55BjJ5Z32zsrC+9FgD2JFqbHbO+lVUAtG0GQOXhrE/vIADyBQC03pzzHoZsXpLE4gwnC4vs7GxzAZ9rLivoN/ufgm/Kv4Y595nL7vtWO6YXP4EjSRUzZUXlpqemS0TMzAwOl89k/fcQ/+PAOWnNycMsnJ/AF/GF6FVR6JQJhIlou4U8gViQLmQKhH/V4X8YNicHGX6daxRodV8AfYU5ULhJB8hvPQBDIwMkbj96An3rWxAxCsi+vGitka9zjzJ6/uf6Hwtcim7hTEEiU+b2DI9kciWiLBmj34RswQISkAd0oAo0gS4wAixgDRyAM3AD3iAAhIBIEAOWAy5IAmlABLJBPtgACkEx2AF2g2pwANSBetAEToI2cAZcBFfADXALDIBHQAqGwUswA
 d6BaQiC8BAVokGqkBakD5lC1hAbWgh5Q0FQOBQDxUOJkBCSQPnQJqgYKoOqoUNQPfQjdBq6CF2D+qAH0CA0Bv0BfYQRmALTYQ3YALaA2bA7HAhHwsvgRHgVnAcXwNvhSrgWPg63whfhG/AALIVfwpMIQMgIA9FGWAgb8URCkFgkAREha5EipAKpRZqQDqQbuY1IkXHkAwaHoWGYGBbGGeOHWYzhYlZh1mJKMNWYY5hWTBfmNmYQM4H5gqVi1bGmWCesP3YJNhGbjS3EVmCPYFuwl7ED2GHsOxwOx8AZ4hxwfrgYXDJuNa4Etw/XjLuA68MN4SbxeLwq3hTvgg/Bc/BifCG+Cn8cfx7fjx/GvyeQCVoEa4IPIZYgJGwkVBAaCOcI/YQRwjRRgahPdCKGEHnEXGIpsY7YQbxJHCZOkxRJhiQXUiQpmbSBVElqIl0mPSa9IZPJOmRHchhZQF5PriSfIF8lD5I/UJQoJhRPShxFQtlOOUq5QHlAeUOlUg2obtRYqpi6nVpPvUR9Sn0vR5Mzl/OX48mtk6uRa5Xrl3slT5TXl3eXXy6fJ18hf0r+pvy4AlHBQMFTgaOwVqFG4bTCPYVJRZqilWKIYppiiWKD4jXFUSW8koGStxJPqUDpsNIlpSEaQtOledK4tE20Otpl2jAdRzek+9OT6cX0H+i99AllJWVb5SjlHOUa5bPKUgbCMGD4M1IZpYyTjLuMj/M05rnP48/bNq9pXv+8KZX5Km4qfJUilWaVAZWPqkxVb9UU1Z2qbapP1DBqJmphatlq+9Uuq43Pp893ns+dXzT/5PyH6rC6iXq4+mr1w+o96pMamhq+GhkaVRqXNMY1GZpumsma5ZrnNMe0aFoLtQRa5VrntV4wlZnuzFRmJbOLOaGtru2nLdE+pN2rPa1jqLNYZ6NOs84TXZIuWzdBt1y3U3dCT0svWC9fr1HvoT5Rn62fpL9Hv1t/ysDQINpgi0GbwaihiqG/YZ5ho+
 FjI6qRq9Eqo1qjO8Y4Y7ZxivE+41smsImdSZJJjclNU9jU3lRgus+0zwxr5mgmNKs1u8eisNxZWaxG1qA5wzzIfKN5m/krCz2LWIudFt0WXyztLFMt6ywfWSlZBVhttOqw+sPaxJprXWN9x4Zq42Ozzqbd5rWtqS3fdr/tfTuaXbDdFrtOu8/2DvYi+yb7MQc9h3iHvQ732HR2KLuEfdUR6+jhuM7xjOMHJ3snsdNJp9+dWc4pzg3OowsMF/AX1C0YctFx4bgccpEuZC6MX3hwodRV25XjWuv6zE3Xjed2xG3E3dg92f24+ysPSw+RR4vHlKeT5xrPC16Il69XkVevt5L3Yu9q76c+Oj6JPo0+E752vqt9L/hh/QL9dvrd89fw5/rX+08EOASsCegKpARGBFYHPgsyCRIFdQTDwQHBu4IfL9JfJFzUFgJC/EN2hTwJNQxdFfpzGC4sNKwm7Hm4VXh+eHcELWJFREPEu0iPyNLIR4uNFksWd0bJR8VF1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7JHZyqffS3UuH4+ziCuPuLjNclrPs2nK15anLz66QX8FZcSoeGx8d3xD/iRPCqeVMrvRfuXflBNeTu4f7kufGK+eN8V34ZfyRBJeEsoTRRJfEXYljSa5JFUnjAk9BteB1sl/ygeSplJCUoykzqdGpzWmEtPi000IlYYqwK10zPSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruYjv5M9UiMJJslg1kLs2qy3mdHZZ/KUcwR5vTkmuRuyx3J88n7fjVmNXd1Z752/ob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41lG99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrblyJe0fViy+KK4k8l3JLr31l9V/ndzPaE7b2l9qX7d+B2CHfc3em681iZYlle2dCu4F2t5czyovK3u1fsvlZhW3F
 gD2mPZI+0MqiyvUqvakfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/TAY0DxQc+HhQcvH/I91BrrUFtxWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XHwo911TvU1zeoN5Q2wo2SxrHjccdv/eD1Q3sTq+lQM6O5+AQ4ITnx4sf4H++eDDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3OHS0/m/989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTSna6wrt7LgZevXvG5cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56WX+x+aem172296XCz/ZbjrY6+BX3n+l37L972un3ljv+dGwOLBvruLr57/17cPel93v3RB6kPXj/Mejj9aP1j7OOiJwpPKp6qP6391fjXZqm99Oyg12DPs4hnj4a4Qy//lfmvT8MFz6nPK0a0RupHrUfPjPmM3Xqx9MXwy4yX0+OFvyn+tveV0auffnf7vWdiycTwa9HrmT9K3qi+OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4T5WfjT93fAn88ngmbWbm3/eE8/syOll+AAAACXBIWXMAAAsTAAALEwEAmpwYAAABEUlEQVQ4Ee2SMUsDQRSE52U3Z3FpjIgQo+a0CCQehisimDa2Fmlt/EX+ATs7LWy0VFCwsLKJtWgRiYWFWAjmdsc9IU1c5Ehrtln2zbzv7Q4LzNYsgf+cgPgef3PL/ccn9IIgjWn1UlEQpsJ3Kxh8ffJurVI47XblcrJXTxay80qEj/6D6b2NFEgDQkFDyoYoF5XE1Q7une0XrOCDRRVctBPVl9SpVMhM1hqHBJpNPNfXceTr88JExDYa2F1exQ9I0cFcIPMLQKuNHaeb3LDMWCrJ63YiB3oOGJEIlELSwt5iKC8+UFbz3mxsrtVwHNdxpZ1rI8Lh1qacj7Wp9uGQ4ckZr0n+OTg3
 3IG8Xyg3YBrjN2mnRpK2GkKGAAAAAElFTkSuQmCC) no-repeat right 50%;
-    }
-    .sorting {
-      background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAKQWlDQ1BJQ0MgUHJvZmlsZQAASA2dlndUU9kWh8+9N73QEiIgJfQaegkg0jtIFQRRiUmAUAKGhCZ2RAVGFBEpVmRUwAFHhyJjRRQLg4Ji1wnyEFDGwVFEReXdjGsJ7601896a/cdZ39nnt9fZZ+9917oAUPyCBMJ0WAGANKFYFO7rwVwSE8vE9wIYEAEOWAHA4WZmBEf4RALU/L09mZmoSMaz9u4ugGS72yy/UCZz1v9/kSI3QyQGAApF1TY8fiYX5QKUU7PFGTL/BMr0lSkyhjEyFqEJoqwi48SvbPan5iu7yZiXJuShGlnOGbw0noy7UN6aJeGjjAShXJgl4GejfAdlvVRJmgDl9yjT0/icTAAwFJlfzOcmoWyJMkUUGe6J8gIACJTEObxyDov5OWieAHimZ+SKBIlJYqYR15hp5ejIZvrxs1P5YjErlMNN4Yh4TM/0tAyOMBeAr2+WRQElWW2ZaJHtrRzt7VnW5mj5v9nfHn5T/T3IevtV8Sbsz55BjJ5Z32zsrC+9FgD2JFqbHbO+lVUAtG0GQOXhrE/vIADyBQC03pzzHoZsXpLE4gwnC4vs7GxzAZ9rLivoN/ufgm/Kv4Y595nL7vtWO6YXP4EjSRUzZUXlpqemS0TMzAwOl89k/fcQ/+PAOWnNycMsnJ/AF/GF6FVR6JQJhIlou4U8gViQLmQKhH/V4X8YNicHGX6daxRodV8AfYU5ULhJB8hvPQBDIwMkbj96An3rWxAxCsi+vGitka9zjzJ6/uf6Hwtcim7hTEEiU+b2DI9kciWiLBmj34RswQISkAd0oAo0gS4wAixgDRyAM3AD3iAAhIBIEAOWAy5IAmlABLJBPtgACkEx2AF2g2pwANSBetAEToI2cAZcBFfADXALDIBHQAqGwUswA
 d6BaQiC8BAVokGqkBakD5lC1hAbWgh5Q0FQOBQDxUOJkBCSQPnQJqgYKoOqoUNQPfQjdBq6CF2D+qAH0CA0Bv0BfYQRmALTYQ3YALaA2bA7HAhHwsvgRHgVnAcXwNvhSrgWPg63whfhG/AALIVfwpMIQMgIA9FGWAgb8URCkFgkAREha5EipAKpRZqQDqQbuY1IkXHkAwaHoWGYGBbGGeOHWYzhYlZh1mJKMNWYY5hWTBfmNmYQM4H5gqVi1bGmWCesP3YJNhGbjS3EVmCPYFuwl7ED2GHsOxwOx8AZ4hxwfrgYXDJuNa4Etw/XjLuA68MN4SbxeLwq3hTvgg/Bc/BifCG+Cn8cfx7fjx/GvyeQCVoEa4IPIZYgJGwkVBAaCOcI/YQRwjRRgahPdCKGEHnEXGIpsY7YQbxJHCZOkxRJhiQXUiQpmbSBVElqIl0mPSa9IZPJOmRHchhZQF5PriSfIF8lD5I/UJQoJhRPShxFQtlOOUq5QHlAeUOlUg2obtRYqpi6nVpPvUR9Sn0vR5Mzl/OX48mtk6uRa5Xrl3slT5TXl3eXXy6fJ18hf0r+pvy4AlHBQMFTgaOwVqFG4bTCPYVJRZqilWKIYppiiWKD4jXFUSW8koGStxJPqUDpsNIlpSEaQtOledK4tE20Otpl2jAdRzek+9OT6cX0H+i99AllJWVb5SjlHOUa5bPKUgbCMGD4M1IZpYyTjLuMj/M05rnP48/bNq9pXv+8KZX5Km4qfJUilWaVAZWPqkxVb9UU1Z2qbapP1DBqJmphatlq+9Uuq43Pp893ns+dXzT/5PyH6rC6iXq4+mr1w+o96pMamhq+GhkaVRqXNMY1GZpumsma5ZrnNMe0aFoLtQRa5VrntV4wlZnuzFRmJbOLOaGtru2nLdE+pN2rPa1jqLNYZ6NOs84TXZIuWzdBt1y3U3dCT0svWC9fr1HvoT5Rn62fpL9Hv1t/ysDQINpgi0GbwaihiqG/YZ5ho+
 FjI6qRq9Eqo1qjO8Y4Y7ZxivE+41smsImdSZJJjclNU9jU3lRgus+0zwxr5mgmNKs1u8eisNxZWaxG1qA5wzzIfKN5m/krCz2LWIudFt0WXyztLFMt6ywfWSlZBVhttOqw+sPaxJprXWN9x4Zq42Ozzqbd5rWtqS3fdr/tfTuaXbDdFrtOu8/2DvYi+yb7MQc9h3iHvQ732HR2KLuEfdUR6+jhuM7xjOMHJ3snsdNJp9+dWc4pzg3OowsMF/AX1C0YctFx4bgccpEuZC6MX3hwodRV25XjWuv6zE3Xjed2xG3E3dg92f24+ysPSw+RR4vHlKeT5xrPC16Il69XkVevt5L3Yu9q76c+Oj6JPo0+E752vqt9L/hh/QL9dvrd89fw5/rX+08EOASsCegKpARGBFYHPgsyCRIFdQTDwQHBu4IfL9JfJFzUFgJC/EN2hTwJNQxdFfpzGC4sNKwm7Hm4VXh+eHcELWJFREPEu0iPyNLIR4uNFksWd0bJR8VF1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7JHZyqffS3UuH4+ziCuPuLjNclrPs2nK15anLz66QX8FZcSoeGx8d3xD/iRPCqeVMrvRfuXflBNeTu4f7kufGK+eN8V34ZfyRBJeEsoTRRJfEXYljSa5JFUnjAk9BteB1sl/ygeSplJCUoykzqdGpzWmEtPi000IlYYqwK10zPSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruYjv5M9UiMJJslg1kLs2qy3mdHZZ/KUcwR5vTkmuRuyx3J88n7fjVmNXd1Z752/ob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41lG99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrblyJe0fViy+KK4k8l3JLr31l9V/ndzPaE7b2l9qX7d+B2CHfc3em681iZYlle2dCu4F2t5czyovK3u1fsvlZhW3F
 gD2mPZI+0MqiyvUqvakfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/TAY0DxQc+HhQcvH/I91BrrUFtxWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XHwo911TvU1zeoN5Q2wo2SxrHjccdv/eD1Q3sTq+lQM6O5+AQ4ITnx4sf4H++eDDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3OHS0/m/989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTSna6wrt7LgZevXvG5cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56WX+x+aem172296XCz/ZbjrY6+BX3n+l37L972un3ljv+dGwOLBvruLr57/17cPel93v3RB6kPXj/Mejj9aP1j7OOiJwpPKp6qP6391fjXZqm99Oyg12DPs4hnj4a4Qy//lfmvT8MFz6nPK0a0RupHrUfPjPmM3Xqx9MXwy4yX0+OFvyn+tveV0auffnf7vWdiycTwa9HrmT9K3qi+OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4T5WfjT93fAn88ngmbWbm3/eE8/syOll+AAAACXBIWXMAAAsTAAALEwEAmpwYAAABmElEQVQ4EdWSv0vDQBTH7y4ZUkKhTdtYHArOUvwPdHAVpeBY3PwH/BfEycF/wclR6NzBxUFxKrgokRLaSkmhTZr+ADWJ32s5DeXaSkHBW97du/c+73vvHiF/vaIooj+pyZYFAaTbtn0DuzR2YQBX1G63K57n7TQajfNlhRfCfN8/6na7u4AS13VPOp3O/iLgXBgAa0i+/Hh7J5RSEoYh6fV6FfjX5wGlMCQwgKpQNs0Lo4kdjUYEz77FvSIDSmGA7DmOU+SKxGJkukeRDfTwWPjjVo0fxH48Hic1TbtmjBX5c2F1WA/3rSAI7obDoSVif81+vyNWAmNQHgwGB6qqbqHxOUVRklDk
 Q2ELCu+h+qJQKDzGUiZb6TPT6TTt9/uHABLeK947QFKE0RSyNg3DkM6c9AN0Xb9CwguUCNDXeKDQQyaTeZpVxc9SZVASQMk2frWFzyCTwUBDElqCmKZZxv10VmaIUmU8Bgmv+Xy+JNRxXzabraJfz3y/0mo2m2e1Wi2q1+sQG+VWgogkAKhlWaeY/pLw/T/7CTBQv9a27vsbAAAAAElFTkSuQmCC) no-repeat right 50%;
-    }
-    div.view-wrapper {
-      input[type="checkbox"], .btn-group {
-        margin-bottom: 9px;
-      }
-    }
-
-    a.ui-icon-circle-close {
-      float: right;
-      opacity: 0.2;
-      padding: 1px 0;
-      position: relative;
-      right: 0px;
-      margin-top: 3px;
-      z-index: 10;
-      &:hover {
-        opacity: 0.7;
-      }
-    }
-    .notActive {
-      a.ui-icon-circle-close {
-        visibility: hidden;
-      }
-    }
-  }
-
-  .open-group > .dropdown-menu {
-    display: block;
-  }
-  .nav-pills li.disabled {
-    display: block;
-    margin: 2px 0;
-    padding: 8px 12px;
-    line-height: 14px;
-  }
-  .box-footer .footer-pagination {
-    float: right;
-    .nav {
-      margin-bottom: 0;
-    }
-    .dropdown {
-      margin-top: 3px;
-    }
-    .dropdown {
-      margin-top: 3px;
-    }
-    .dropdown select {
-      width: 60px;
-    }
-    .page-listing a {
-      line-height: 0;
-      border: none;
-      margin: 0 10px 0 0;
-      cursor: pointer;
-      color: #0088CC;
-      padding: 8px 0;
-      float: left;
-      text-decoration: underline;
-    }
-    .page-listing a:hover {
-      text-decoration: none;
-    }
-    .page-listing {
-      width: 100px;
-      .table {
-        th.name {
-          width: 300px;
-          a.filter-label {
-            width: 57px;
-            display: block;
-            float: left;
-          }
-        }
-      }
-    }
-  }
-  .host-components-expander {
-    .icon-caret-right, .icon-caret-down {
-      vertical-align: middle;
-      margin-right: 5px;
-      margin-bottom: 2px;
-      text-decoration: none;
-    }
-  }
-  .host-components {
-    display: none;
-    padding-left: 13px;
-  }
-  .sort-wrapper .column-name {
-    cursor: pointer;
-    padding-right: 18px;
-  }
-  .table-bordered  {
-    border-left:1px solid #dddddd;
-  }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/styles/common.less
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/styles/common.less b/contrib/views/slider/src/main/resources/ui/app/styles/common.less
deleted file mode 100644
index e9abd17..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/styles/common.less
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-.table-row() {
-  margin: 10px 0;
-}
-
-html {
-  overflow-y: scroll;
-}
-.icon-minus-sign {
-  color: #FF4B4B;
-}
-.tooltip {
-  z-index: 1500;
-  .tooltip-inner {
-    text-align: left;
-  }
-}
-.popover {
-  max-width: 800px;
-  &.bottom {
-    left: 5px;
-  }
-}
-
-.slider-name-popover {
-  max-width: 600px !important;
-  .row {
-    .table-row();
-  }
-}
-
-a {
-  cursor: pointer;
-}
-
-select {
-  background-color: #ffffff;
-  border: 1px solid #cccccc;
-  color: #555555;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-
-.well {
-  border-radius: 0px;
-  -webkit-border-radius: 0px;
-  -moz-border-radius: 0px;
-  -webkit-box-shadow: none;
-  -moz-box-shadow: none;
-  box-shadow: none;
-}
-
-.nav-pills {
-  &>li {
-    &> a {
-      border-radius: 0px;
-      -webkit-border-radius: 0px;
-      -moz-border-radius: 0px;
-    }
-    &.active {
-      &> a, &> a:hover, &> a:focus {
-        background-color: #666666;
-
-      }
-    }
-  }
-}
-
-.slider-header {
-  overflow: hidden;
-  .box-header {
-    padding-top: 20px;
-  }
-}
-
-
-
-.modal {
-  overflow-y: hidden;
-}
-.modal-backdrop {
-  opacity: 0.8;
-}
-.modal-backdrop.in {
-  opacity:0;
-}
-
-.error-message {
-  font-weight: bold;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/styles/old-bootstrap.less
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/styles/old-bootstrap.less b/contrib/views/slider/src/main/resources/ui/app/styles/old-bootstrap.less
deleted file mode 100644
index fde5768..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/styles/old-bootstrap.less
+++ /dev/null
@@ -1,164 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-.btn-area {
-  .btn{
-    display: inline-block;
-    padding: 4px 14px;
-    margin-bottom: 0;
-    font-size: 14px;
-    line-height: 20px;
-    color: #333333;
-    text-align: center;
-    text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
-    vertical-align: middle;
-    cursor: pointer;
-    background-color: #f5f5f5;
-    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
-    background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
-    background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
-    background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
-    background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
-    background-repeat: repeat-x;
-    border: 1px solid #bbbbbb;
-    border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-    border-color: #e6e6e6 #e6e6e6 #bfbfbf;
-    border-bottom-color: #a2a2a2;
-    -webkit-border-radius: 4px;
-    -moz-border-radius: 4px;
-    border-radius: 4px;
-    filter: progid:dximagetransform.microsoft.gradient(enabled=false);
-    -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-    -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  }
-  .btn:hover {
-    color: #333333;
-    text-decoration: none;
-    background-color: #e6e6e6;
-    background-position: 0 -15px;
-    -webkit-transition: background-position 0.1s linear;
-    -moz-transition: background-position 0.1s linear;
-    -o-transition: background-position 0.1s linear;
-    transition: background-position 0.1s linear;
-  }
-  .btn.active, .btn:active {
-    background-color: #e6e6e6;
-    background-color: #d9d9d9 \9;
-    background-image: none;
-    outline: 0;
-    -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-    -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-    box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-  }
-  .btn-success {
-    color: #ffffff;
-    text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-    background-color: #5bb75b;
-    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
-    background-image: -webkit-linear-gradient(top, #62c462, #51a351);
-    background-image: -o-linear-gradient(top, #62c462, #51a351);
-    background-image: linear-gradient(to bottom, #62c462, #51a351);
-    background-image: -moz-linear-gradient(top, #62c462, #51a351);
-    background-repeat: repeat-x;
-    border-color: #51a351 #51a351 #387038;
-    border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-    filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);
-    filter: progid:dximagetransform.microsoft.gradient(enabled=false);
-  }
-  .btn.btn-success:hover, .btn-success:active, .btn-success.active, .btn-success.disabled, .btn-success[disabled] {
-    color: #ffffff;
-    background-color: #51a351;
-  }
-}
-
-.modal-header {
-  padding: 9px 15px;
-  border-bottom: 1px solid #eee;
-}
-.modal-title {
-  line-height: 30px;
-  font-size: 24px;
-  font-family: inherit;
-  font-weight: bold;
-  color: inherit;
-  text-rendering: optimizelegibility;
-}
-.modal-body{
-  padding: 15px;
-}
-.modal-footer {
-  margin-top: 0px;
-  padding: 14px 15px 15px;
-  margin-bottom: 0;
-  text-align: right;
-  background-color: #f5f5f5;
-  border-top: 1px solid #ddd;
-  -webkit-border-radius: 0 0 6px 6px;
-  -moz-border-radius: 0 0 6px 6px;
-  border-radius: 0 0 6px 6px;
-  -webkit-box-shadow: inset 0 1px 0 #ffffff;
-  -moz-box-shadow: inset 0 1px 0 #ffffff;
-  box-shadow: inset 0 1px 0 #ffffff;
-
-  .btn-area();
-
-}
-.slider-app-title {
-  font-style: italic;
-  cursor: pointer;
-}
-
-.api-error {
-  max-height: 403px;
-  word-wrap: break-word;
-  overflow: auto;
-}
-
-.dropdown-submenu {
-  position:relative;
-}
-.dropdown-submenu>.dropdown-menu {
-  top:0;
-  left:-100%;
-  margin-top:-6px;
-  margin-left:-1px;
-  -webkit-border-radius:6px 0 6px 6px;
-  -moz-border-radius:6px 0 6px 6px;
-  border-radius:6px 0 6px 6px;
-}
-.dropdown-submenu:hover>.dropdown-menu {
-  display:block;
-}
-.dropdown-submenu>a:before {
-  display:block;
-  content:" ";
-  float:left;
-  width:0;
-  height:0;
-  border-color:transparent;
-  border-style:solid;
-  border-width:5px 5px 5px 0px;
-  border-right-color:#cccccc;
-  margin-top:5px;
-  margin-left:-10px;
-}
-.dropdown-submenu:hover>a:after {
-  border-left-color:#ffffff;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/styles/wizard.less
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/styles/wizard.less b/contrib/views/slider/src/main/resources/ui/app/styles/wizard.less
deleted file mode 100644
index 635f51a..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/styles/wizard.less
+++ /dev/null
@@ -1,232 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-@import-once 'common.less';
-
-.create-app-wizard-wrapper {
-  .modal-backdrop {
-    opacity: 0;
-  }
-}
-
-#createAppWizard {
-  width: 94%;
-  margin: 0 0 auto;
-  left: 3%;
-  .wizard-nav {
-    padding-left: 0px;
-  }
-  h5 {
-    font-weight: bold;
-  }
-  .slider-modal-body {
-    .wizard-content{
-      background-color: #ffffff;
-      label {
-        font-weight: normal;
-      }
-      .form-horizontal {
-        .control-label {
-          text-align: left;
-        }
-      }
-    }
-  }
-  .next-btn {
-    margin-left: 5px;
-  }
-  #configs-text-area {
-    margin-bottom: 10px;
-    height: 225px;
-  }
-  #step4 {
-    ul {
-      list-style: none;
-    }
-    pre {
-      margin-left: 30px;
-      max-height: 124px;
-    }
-  }
-  #step2 {
-    .table-container {
-      border: 1px solid #e3e3e3;
-      padding: 5px;
-      border-radius: 4px;
-      overflow: auto;
-      .components-table {
-        width: 100%;
-        border-spacing: 10px;
-        border-collapse: separate;
-        th {
-          padding-right: 1px;
-        }
-        .cell-narrow {
-          width: 4em;
-        }
-        .cell-wide {
-          width: 5em;
-        }
-        .cell-auto {
-          input {
-            width: 100%;
-            min-width: 7em;
-          }
-        }
-      }
-      margin-bottom: 30px;
-    }
-  }
-  #step1 {
-    select {
-      padding: 4px 0;
-    }
-    hr {
-      .table-row();
-    }
-    label {
-      width: 100%;
-    }
-    .row {
-      margin: 5px 0;
-    }
-    .app-types-alert {
-      margin-top: 20px;
-    }
-    .alert-warning {
-      border-color: #fbeed5;
-      color: #c09853;
-    }
-  }
-  .pseudo-label {
-    display: inline-block;
-  }
-  .app-wiz-configs {
-    .accordion-toggle {
-      display: block;
-    }
-    .panel-heading{
-      .icon{
-        width: 23px;
-      }
-    }
-  }
-}
-
-
-.slider-modal {
-  position: fixed;
-  top: 50%;
-  left: 50%;
-  z-index: 1050;
-  width: 560px;
-  margin: -250px 0 0 -280px;
-  overflow: auto;
-  background-color: #ffffff;
-  border: 1px solid #999;
-  border: 1px solid rgba(0, 0, 0, 0.3);
-  *border: 1px solid #999;
-  -webkit-border-radius: 6px;
-  -moz-border-radius: 6px;
-  border-radius: 6px;
-  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  -webkit-background-clip: padding-box;
-  -moz-background-clip: padding-box;
-  background-clip: padding-box;
-}
-
-.slider-modal.fade {
-  top: -25%;
-  -webkit-transition: opacity 0.3s linear, top 0.3s ease-out;
-  -moz-transition: opacity 0.3s linear, top 0.3s ease-out;
-  -o-transition: opacity 0.3s linear, top 0.3s ease-out;
-  transition: opacity 0.3s linear, top 0.3s ease-out;
-}
-
-.slider-modal.fade.in {
-  top: 50%;
-}
-
-.slider-modal-header {
-  padding: 9px 15px;
-  border-bottom: 1px solid #eee;
-}
-
-.slider-modal-header .close {
-  margin-top: 2px;
-}
-
-.slider-modal-header h3 {
-  margin: 0;
-  line-height: 30px;
-}
-
-.slider-modal-body {
-  max-height: 400px;
-  padding: 15px;
-  overflow-y: auto;
-}
-
-.slider-modal-form {
-  margin-bottom: 0;
-}
-
-.slider-modal-footer {
-  padding: 14px 15px 15px;
-  margin-bottom: 0;
-  text-align: right;
-  background-color: #f5f5f5;
-  border-top: 1px solid #ddd;
-  -webkit-border-radius: 0 0 6px 6px;
-  -moz-border-radius: 0 0 6px 6px;
-  border-radius: 0 0 6px 6px;
-  *zoom: 1;
-  -webkit-box-shadow: inset 0 1px 0 #ffffff;
-  -moz-box-shadow: inset 0 1px 0 #ffffff;
-  box-shadow: inset 0 1px 0 #ffffff;
-}
-
-.slider-modal-footer:before,
-.slider-modal-footer:after {
-  display: table;
-  line-height: 0;
-  content: "";
-}
-
-.modal-footer:after {
-  clear: both;
-}
-
-.slider-modal-footer .btn + .btn {
-  margin-bottom: 0;
-  margin-left: 5px;
-}
-
-.slider-modal-footer .btn-group .btn + .btn {
-  margin-left: -1px;
-}
-
-// remove padding for IE
-.form-horizontal .radio,
-.form-horizontal .checkbox,
-.form-horizontal .radio-inline,
-.form-horizontal .checkbox-inline {
-  padding: 0px;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/application.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/application.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/application.hbs
deleted file mode 100755
index 3b1b792..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/application.hbs
+++ /dev/null
@@ -1,56 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-{{!
-  DON'T TRY TO PUT OUTLET INTO CONDITIONAL STATES
-  https://github.com/emberjs/ember.js/issues/3187 - CLOSED BUT NOT FIXED YET
-}}
-
-
-{{#unless App.viewEnabled}}
-  {{#if App.viewErrors.length}}
-    <div class="alert alert-danger">
-      {{#each error in App.viewErrors}}
-        <div class="error-message">{{{error.message}}}</div>
-      {{/each}}
-    </div>
-  {{/if}}
-{{/unless}}
-
-<div class="slider-header">
-  {{#view view.SliderTitleView}}
-    <h3 class="pull-left" id="slider-title"><span class="slider-app-title">{{App.label}}</span></h3>
-    {{#if view.showCreateAppButton}}
-      <div class="box-header pull-right">
-        {{#if App.sliderUser}}
-          <div class="pull-left view-user">
-            <i class="icon-user"></i>&nbsp;{{App.sliderUser}}
-          </div>
-        {{/if}}
-        <div class="create-app pull-right">
-          <a href="#" class="btn btn-primary" {{bind-attr disabled="App.viewDisabled"}} {{action createApp}}>
-            <i class="icon-plus"></i><span>&nbsp;{{t slider.apps.create}}</span>
-          </a>
-        </div>
-      </div>
-    {{/if}}
-  {{/view}}
-  {{outlet bs-tooltip-box}}
-</div>
-
-{{outlet}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/common/ajax_error.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/common/ajax_error.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/common/ajax_error.hbs
deleted file mode 100644
index dd2b6f1..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/common/ajax_error.hbs
+++ /dev/null
@@ -1,24 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<span class="text-danger">{{view.statusCode}}</span> <span>&nbsp;{{view.api}}</span>
-{{#if view.showMessage}}
-    <br />
-    <br />
-    <pre><strong>{{t ajax.errorMessage}}: </strong><span class="text-danger">{{view.message}}</span></pre>
-{{/if}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/common/app_tooltip.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/common/app_tooltip.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/common/app_tooltip.hbs
deleted file mode 100644
index d748a41..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/common/app_tooltip.hbs
+++ /dev/null
@@ -1,24 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<div id="hover-on-app" class="row-fluid">
-  <div><strong>{{t common.description}}</strong></div>
-  <div>{{formatWordBreak view.content.description devider='.'}}</div>
-  <div><strong>{{t common.diagnostics}}</strong></div>
-  <div>{{formatWordBreak view.content.diagnostics devider='.'}}</div>
-</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/common/chart.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/common/chart.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/common/chart.hbs
deleted file mode 100644
index e590a75..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/common/chart.hbs
+++ /dev/null
@@ -1,26 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<div {{bind-attr class=":time-label"}}>{{view.parentView.currentTimeState.name}}</div>
-<div {{bind-attr id="view.containerId"}} {{bind-attr class="view.containerClass :chart-container"}}>
-  <div {{bind-attr id="view.yAxisId"}} {{bind-attr class="view.yAxisClass :chart-y-axis"}}></div>
-  <div {{bind-attr id="view.xAxisId"}} {{bind-attr class="view.xAxisClass :chart-x-axis"}}></div>
-  <div {{bind-attr id="view.legendId"}} {{bind-attr class="view.legendClass :chart-legend"}}></div>
-  <div {{bind-attr id="view.chartId"}} {{bind-attr class="view.chartClass :chart"}}></div>
-  <div {{bind-attr id="view.titleId"}} {{bind-attr class="view.titleClass :chart-title"}}>{{view.title}}</div>
-</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/common/config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/common/config.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/common/config.hbs
deleted file mode 100644
index fa11a23..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/common/config.hbs
+++ /dev/null
@@ -1,37 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<div class="form-group">
-
-    <label class="col-sm-4 control-label">{{formatWordBreak config.label devider='.'}}</label>
-
-    <div class="col-sm-6">
-      {{view config.view
-        value=config.value
-        content=config.options
-        classBinding=":form-control :slider-wiz-config-value config.className"
-        disabled=config.readOnly
-      }}
-    </div>
-
-  {{#if isCustom}}
-      <div class="col-sm-2">
-        {{#bs-button clicked="deleteConfig" clickedParamBinding="config" type="danger"}}{{t common.delete}}{{/bs-button}}
-      </div>
-  {{/if}}
-</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/components/.gitkeep
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/components/.gitkeep b/contrib/views/slider/src/main/resources/ui/app/templates/components/.gitkeep
deleted file mode 100755
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/components/configSection.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/components/configSection.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/components/configSection.hbs
deleted file mode 100644
index 3d6aa20..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/components/configSection.hbs
+++ /dev/null
@@ -1,78 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-{{#bs-panel heading=sectionLabel collapsible=true dismiss=false open=false }}
-    <form class="form-horizontal" role="form">
-      {{#each config in sectionConfigs}}
-        {{#if config.isSet}}
-          {{#view "configSet" configSet=config}}
-              <div class="form-group">
-                  <label class="col-sm-4 control-label">{{formatWordBreak view.configSet.trigger.label devider='.'}}</label>
-
-                  <div class="col-sm-6">
-                    {{view view.configSet.trigger.view
-                      checked=view.configSet.trigger.value
-                      disabled=view.configSet.trigger.readOnly
-                    }}
-                  </div>
-              </div>
-            {{#each config in view.configs}}
-              {{partial "common/config"}}
-            {{/each}}
-          {{/view}}
-        {{else}}
-          {{partial "common/config"}}
-        {{/if}}
-      {{/each}}
-    </form>
-    {{#if isCustom}}
-      {{#bs-button clicked="addProperty" class="add-property" type="link"}}{{t configs.add_property}}...{{/bs-button}}
-    {{/if}}
-{{/bs-panel}}
-{{#bs-modal name="addPropertyModal" footerButtonsBinding="addPropertyModalButtons" titleBinding="addPropertyModalTitle"}}
-{{! "Add Property"-form}}
-    <form class="form-horizontal" role="form">
-        <div {{bind-attr class=":form-group newConfig.hasError:has-error"}}>
-            <div class="col-sm-4">
-                <label class="control-label">{{t common.key}}</label>
-            </div>
-            <div class="col-sm-6">
-              {{input value=newConfig.name class="form-control new-config-name"}}
-            </div>
-        </div>
-        <div {{bind-attr class=":form-group"}}>
-            <div class="col-sm-4">
-                <label class="control-label">{{t common.value}}</label>
-            </div>
-            <div class="col-sm-6">
-              {{input value=newConfig.value class="form-control new-config-value"}}
-            </div>
-        </div>
-        <div class="form-group">
-          {{#if newConfig.hasError}}
-              <div class="col-sm-10">
-                  <div class="alert alert-danger">
-                    {{newConfig.messsage}}
-                  </div>
-              </div>
-          {{/if}}
-        </div>
-    </form>
-{{! "Add Property"-form end}}
-{{/bs-modal}}
-{{outlet bs-tooltip-box}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/createAppWizard.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/createAppWizard.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/createAppWizard.hbs
deleted file mode 100644
index 8bfee87..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/createAppWizard.hbs
+++ /dev/null
@@ -1,43 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-<div class="modal-backdrop"></div>
-<div class="slider-modal" id="createAppWizard">
-  <div class="slider-modal-header">
-    <button type="button" class="close" {{action hide target="view"}}>&times;</button>
-    <h3 id="myModalLabel">{{t wizard.name}}</h3>
-  </div>
-  <div class="slider-modal-body">
-    <div class="container-fluid">
-      <div class="row">
-        <div class="col-xs-3 wizard-nav">
-          <div class="well">
-            <ul class="nav nav-pills nav-stacked">
-              <li {{bind-attr class="view.isStep1:active view.isStep1Disabled:disabled"}}><a href="javascript:void(null);" {{action gotoStep 1 target="controller"}}>{{t wizard.step1.name}}</a></li>
-              <li {{bind-attr class="view.isStep2:active view.isStep2Disabled:disabled"}}><a href="javascript:void(null);" {{action gotoStep 2 target="controller"}}>{{t wizard.step2.name}}</a></li>
-              <li {{bind-attr class="view.isStep3:active view.isStep3Disabled:disabled"}}><a href="javascript:void(null);" {{action gotoStep 3 target="controller"}}>{{t wizard.step3.name}}</a></li>
-              <li {{bind-attr class="view.isStep4:active view.isStep4Disabled:disabled"}}><a href="javascript:void(null);" {{action gotoStep 4 target="controller"}}>{{t wizard.step4.name}}</a></li>
-            </ul>
-          </div>
-        </div>
-        <div class="wizard-content well col-xs-9">
-          {{outlet}}
-        </div>
-      </div>
-    </div>
-  </div>
-</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/createAppWizard/step1.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/createAppWizard/step1.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/createAppWizard/step1.hbs
deleted file mode 100644
index fc46c69..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/createAppWizard/step1.hbs
+++ /dev/null
@@ -1,192 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-<div id="step1">
-  <form role="form" class="form-horizontal">
-    <!-- Available Applications -->
-    {{#if controller.isAppTypesError}}
-      <div class="row">
-        <div class="col-xs-12 alert alert-warning app-types-alert">
-          {{t wizard.step1.noAppTypesError}}
-        </div>
-      </div>
-    {{/if}}
-    <strong>{{t wizard.step1.header}}</strong>
-    <div class="form-group row">
-      <div class="col-xs-3">
-        <label class="control-label">{{t wizard.step1.appTypes}}</label>
-      </div>
-      <div class="col-xs-7">
-        {{#if controller.isAppTypesError}}
-          {{view
-            Em.Select
-            contentBinding="view.noAppsAvailableSelect"
-            class="form-control type-select"
-            disabled=true
-          }}
-        {{else}}
-          {{view
-            Em.Select
-            contentBinding="controller.availableTypes"
-            optionLabelPath="content.displayName"
-            class="form-control type-select"
-            valueBinding="controller.selectedType"
-            disabledBinding="controller.isAppTypesError"
-          }}
-        {{/if}}
-      </div>
-    </div>
-    <div class="form-group row">
-      <div class="col-xs-3">
-        <label class=" control-label">{{t wizard.step1.description}}</label>
-      </div>
-      <div class="col-xs-7">
-        <span class="pseudo-label control-label">
-          {{#if controller.isAppTypesError}}
-            {{t slider.apps.no.description.available}}
-          {{else}}
-            {{controller.typeDescription}}
-          {{/if}}
-        </span>
-      </div>
-    </div>
-    <div class="form-group row">
-      <div class="col-xs-3">
-        <div {{bind-attr class=":control-group controller.isNameError:error"}}>
-          <label class="control-label">{{t common.name}}</label>
-        </div>
-      </div>
-      <div class="col-xs-7">
-        {{input id="app-name-input" class="form-control" valueBinding="controller.newApp.name" disabledBinding="controller.isAppTypesError" placeholderTranslation="form.placeholder.step1.name"}}
-      </div>
-    </div>
-    {{#if controller.isNameError}}
-      <div class="row">
-        <div class="col-xs-12 alert alert-danger">
-          {{controller.nameErrorMessage}}
-        </div>
-      </div>
-    {{/if}}
-    <div class="form-group row">
-      <div class="col-xs-3">
-        <label class=" control-label">{{t wizard.step1.enable2wayssl}}</label>
-      </div>
-      <div class="col-xs-7">
-        {{view
-          Em.Checkbox
-          class="form-control type-select"
-          checkedBinding="controller.newApp.twoWaySSLEnabled"
-        }}
-      </div>
-    </div>
-    <!-- Available Applications end -->
-    <!-- Scheduler Options -->
-    <hr />
-    <div class="row">
-      <strong>{{t wizard.step1.schedulerOptions.label}}</strong>
-    </div>
-    <div class="row">
-      <div class="col-xs-3">
-        <label class="control-label">{{t wizard.step1.schedulerOptions.queueName}}</label>
-      </div>
-      <div class="col-xs-7">
-        {{input class="form-control queueName" valueBinding="controller.newApp.queueName" placeholderTranslation="form.placeholder.optional"}}
-      </div>
-    </div>
-    <!-- Scheduler Options end -->
-    <!-- YARN Labels -->
-    <hr />
-    <div class="row">
-      <strong>{{t wizard.step1.yarnLabels.label}}</strong>
-    </div>
-    <div class="row">
-      <div class="col-xs-3">
-        <label class="control-label">
-          {{view view.radioButton name="yarnLabel" selectionBinding="controller.newApp.selectedYarnLabel" value=0 class="radio-inline"}}
-          {{t wizard.step1.yarnLabels.options.anyHost}}
-        </label>
-      </div>
-    </div>
-    <div class="row">
-      <div class="col-xs-3">
-        <label class="control-label">
-          {{view view.radioButton name="yarnLabel" selectionBinding="controller.newApp.selectedYarnLabel" value=1 class="radio-inline"}}
-          {{t wizard.step1.yarnLabels.options.nonLabeledHost}}
-        </label>
-      </div>
-    </div>
-    <div class="row">
-      <div class="col-xs-3">
-        <label class="control-label">
-          {{view view.radioButton name="yarnLabel" selectionBinding="controller.newApp.selectedYarnLabel" value=2 class="radio-inline special-label-radio"}}
-          {{t wizard.step1.yarnLabels.options.specifyLabel}}
-        </label>
-      </div>
-      <div class="col-xs-7">
-        {{input type="text" class="form-control special-label" disabledBinding="view.specLabelEnabled" valueBinding="controller.newApp.specialLabel"}}
-      </div>
-    </div>
-    <!-- YARN Labels end -->
-    <!-- Log Aggregation -->
-    <hr />
-    <div class="row">
-      <strong>{{t wizard.step1.logAggregation.label}}</strong>
-    </div>
-    <div class="row">
-      <div class="col-xs-3">
-        <label class="control-label">{{t wizard.step1.logAggregation.filePatterns.include}}</label>
-      </div>
-      <div class="col-xs-7">
-        {{input class="form-control includeFilePatterns" valueBinding="controller.newApp.includeFilePatterns" placeholderTranslation="form.placeholder.include.file.patterns"}}
-      </div>
-    </div>
-    <div class="row">
-      <div class="col-xs-3">
-        <label class="control-label">{{t wizard.step1.logAggregation.filePatterns.exclude}}</label>
-      </div>
-      <div class="col-xs-7">
-        {{input class="form-control excludeFilePatterns" valueBinding="controller.newApp.excludeFilePatterns" placeholderTranslation="form.placeholder.exclude.file.patterns"}}
-      </div>
-    </div>
-    <div class="row">
-      <div class="col-xs-3" {{bind-attr class=":col-xs-3 controller.isFrequencyError:error"}}>
-        <label class="control-label">{{t common.frequency}}</label>
-      </div>
-      <div class="col-xs-7">
-        <div class="input-group">
-          {{input class="form-control frequency" valueBinding="controller.newApp.frequency" placeholderTranslation="form.placeholder.frequency"}}
-          <div class="input-group-addon">{{t common.seconds}}</div>
-        </div>
-      </div>
-    </div>
-    {{#if controller.isFrequencyError}}
-      <div class="row">
-        <div class="col-xs-12 alert alert-danger">
-          {{controller.frequencyErrorMessage}}
-        </div>
-      </div>
-    {{/if}}
-    <!-- Log Aggregation end -->
-    <div class="btn-area">
-      <button
-        class="btn btn-success pull-right next-btn"
-        {{bind-attr disabled="controller.isSubmitDisabled"}}
-        {{action submit target="controller"}}>{{t common.next}} &rarr;
-      </button>
-    </div>
-  </form>
-</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/createAppWizard/step2.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/createAppWizard/step2.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/createAppWizard/step2.hbs
deleted file mode 100644
index 6407256..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/createAppWizard/step2.hbs
+++ /dev/null
@@ -1,62 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-<div id="step2">
-  <p>
-    {{newApp.appType.displayName}}{{t wizard.step2.header}}
-  </p>
-  <div class="table-container">
-    <table class="components-table">
-      <thead>
-      <tr>
-        <th></th>
-        <th>{{t wizard.step2.table.instances}}</th>
-        <th>{{t wizard.step2.table.memory}}</th>
-        <th>{{t wizard.step2.table.cpu}}</th>
-        <th colspan="2">{{t wizard.step2.table.yarnLabels}}</th>
-      </tr>
-      </thead>
-      <tbody>
-      {{#each}}
-        <tr>
-          <td>{{displayName}}</td>
-          <td>{{input class="cell-narrow numInstances" valueBinding="numInstances"}}</td>
-          <td>{{input class="cell-wide yarnMemory" valueBinding="yarnMemory"}}</td>
-          <td>{{input class="cell-narrow yarnCPU" valueBinding="yarnCPU"}}</td>
-          <td>
-            <div {{bs-bind-tooltip content=view.checkBoxPopover}}>
-              {{input type="checkbox" checkedBinding="yarnLabelChecked" class="checkbox-inline"}}
-            </div>
-          </td>
-          <td class="cell-auto">
-            <div {{bs-bind-tooltip content=view.yarnLabelPopover}}>
-              {{input class="yarnLabel" valueBinding="yarnLabel" disabledBinding="yarnLabelNotChecked"}}
-            </div>
-          </td>
-        </tr>
-      {{/each}}
-      </tbody>
-    </table>
-  </div>
-  {{#if controller.isError}}
-    <div class="alert alert-danger">{{t wizard.step2.error.numbers}}</div>
-  {{/if}}
-  <div class="btn-area">
-    <button class="btn btn-success pull-right next-btn" {{bind-attr disabled="controller.isSubmitDisabled"}} {{action submit target="controller"}}>{{t common.next}} &rarr;</button>
-    <button class="btn" {{action prevStep}}>&larr; {{t common.back}}</button>
-  </div>
-</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/createAppWizard/step3.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/createAppWizard/step3.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/createAppWizard/step3.hbs
deleted file mode 100644
index a2f3898..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/createAppWizard/step3.hbs
+++ /dev/null
@@ -1,37 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<p>
-  {{t wizard.step3.header.beginning}}{{appWizardController.newApp.appType.displayName}}{{t wizard.step3.header.end}}
-</p>
-<div {{bind-attr class="controller.isError:has-error :form-group :app-wiz-configs"}}>
-  {{#each controller.sectionKeys}}
-    {{config-section
-      section=this
-      config=controller.configs
-      predefinedConfigNames=controller.appWizardController.newApp.predefinedConfigNames
-    }}
-  {{/each}}
-  {{#if controller.isError}}
-    <div class="alert alert-danger">{{t wizard.step3.error}}</div>
-  {{/if}}
-</div>
-<div class="btn-area">
-  <button class="btn btn-success pull-right next-btn" {{action submit}}>{{t common.next}} &rarr;</button>
-  <button class="btn" {{action prevStep}}>&larr; {{t common.back}}</button>
-</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/createAppWizard/step4.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/createAppWizard/step4.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/createAppWizard/step4.hbs
deleted file mode 100644
index 50e974b..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/createAppWizard/step4.hbs
+++ /dev/null
@@ -1,41 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<div id="step4">
-<h5>{{t common.summary}}</h5>
-<ul>
-  <li>{{t wizard.step4.appName}}: {{controller.newApp.name}}</li>
-  <li>{{t wizard.step4.appType}}: {{controller.newApp.appType.displayName}}</li>
-  <li>{{t wizard.step4.2waysslEnabled}}: {{controller.newApp.twoWaySSLEnabled}}</li>
-</ul>
-<h5>{{t common.components}}</h5>
-<ul>
-  {{#each component in controller.newApp.components}}
-    <li>{{component.displayName}}: {{component.numInstances}}</li>
-  {{/each}}
-</ul>
-<h5>{{t common.configuration}}</h5>
-<pre>{{controller.configsFormatted}}</pre>
-
-<div class="btn-area">
-  <button
-      class="btn btn-success pull-right"
-    {{bind-attr disabled="controller.isSubmitDisabled"}}
-    {{action finish target="controller"}}>{{t common.finish}}</button>
-</div>
-</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/index.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/index.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/index.hbs
deleted file mode 100755
index b466873..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/index.hbs
+++ /dev/null
@@ -1,21 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<div class="header">
-Slider Apps
-</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/slider_app.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/slider_app.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/slider_app.hbs
deleted file mode 100644
index fbe34fa..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/slider_app.hbs
+++ /dev/null
@@ -1,70 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-<div class="app-page">
-  <div class="apps-breadcrumbs">
-    {{#link-to 'slider_apps'}}
-      {{t slider.apps.title}}
-    {{/link-to}}
-      &rarr;
-    {{model.name}}
-  </div>
-  <p></p>
-  <div class="col-md-5 pull-right">
-    <div class="btn-group display-inline-block pull-right">
-      <button class="btn dropdown-toggle btn-primary " data-toggle="dropdown" {{bind-attr disabled=model.isActionPerformed}}>
-        {{t common.actions}}
-        <span class="caret"></span>
-      </button>
-      <ul class="dropdown-menu">
-        {{#each option in controller.availableActions}}
-          <li {{bind-attr class="option.submenu.length:dropdown-submenu"}}>
-            <a {{action 'openModal' option target='controller'}}>{{humanize option.title}}</a>
-            <ul class="dropdown-menu">
-              {{#each subitem in option.submenu}}
-                <li>
-                  <a {{action 'openModal' subitem target='controller'}}>{{humanize subitem.title}}</a>
-                </li>
-              {{/each}}
-            </ul>
-          </li>
-        {{/each}}
-      </ul>
-    </div>
-  </div>
-
-  {{#if weHaveQuicklinks}}
-    <div class="col-md-3 quick-links-wrapper pull-right">
-      <ul class="nav nav-pills move">
-        <li class="dropdown">
-          <a class="dropdown-toggle" data-toggle="dropdown" href="#">{{t common.quickLinks}}<b class="caret"></b></a>
-          <ul class="dropdown-menu">
-            {{#each quickLink in controller.quickLinksOrdered}}
-              <li><a {{bind-attr href="quickLink.url"}} target="_blank">{{quickLink.label}}</a></li>
-            {{/each}}
-          </ul>
-        </li>
-      </ul>
-    </div>
-  {{/if}}
-
-  {{bs-tabs contentBinding="sliderAppTabs" default="summary"}}
-  <div style="margin-top: 20px;">
-    {{outlet}}
-  </div>
-
-</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/configs.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/configs.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/configs.hbs
deleted file mode 100644
index 74c01d1..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/configs.hbs
+++ /dev/null
@@ -1,40 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<div class="app_configs">
-  {{#each configCategory in view.configsByCategories}}
-    {{#if configCategory.isVisible}}
-      {{#bs-panel heading=configCategory.name collapsible=true open=false}}
-        <div class="container-fluid">
-          {{#each configCategory.configs}}
-            <div class="row">
-              <div class="col-md-3 property-name">{{formatWordBreak key devider="."}}</div>
-              <div>
-                {{#if isMultiline}}
-                  {{textarea disabled=true value=value classNames="col-md-6"}}
-                {{else}}
-                  <input type="text" {{bind-attr value=value}} disabled="disabled" class="col-md-6" />
-                {{/if}}
-              </div>
-            </div>
-          {{/each}}
-        </div>
-      {{/bs-panel}}
-    {{/if}}
-  {{/each}}
-</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/destroy/destroy_popup.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/destroy/destroy_popup.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/destroy/destroy_popup.hbs
deleted file mode 100644
index d696150..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/destroy/destroy_popup.hbs
+++ /dev/null
@@ -1,20 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<p class="alert alert-danger"> <span class="icon-warning-sign"></span> {{t sliderApp.destroy.confirm.body}}</p>
-{{input type="checkbox" checkedBinding="controller.confirmChecked"}} {{{view.confirmMessage}}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/destroy/destroy_popup_footer.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/destroy/destroy_popup_footer.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/destroy/destroy_popup_footer.hbs
deleted file mode 100644
index e6c38a5..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/destroy/destroy_popup_footer.hbs
+++ /dev/null
@@ -1,28 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-{{bs-button
-  content=view.cancelButton
-  targetObjectBinding="view.targetObject"
-}}
-
-{{bs-button
-  content=view.destroyButton
-  disabledBinding="controller.destroyButtonEnabled"
-  targetObjectBinding="view.targetObject"
-}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/flex_popup.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/flex_popup.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/flex_popup.hbs
deleted file mode 100644
index e9aa52d..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/flex_popup.hbs
+++ /dev/null
@@ -1,40 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<div class="flex-popup">
-  <form class="form-horizontal" role="form">
-    <div class="alert alert-info">
-      {{t sliderApp.flex.message}}
-    </div>
-    <div class="form-group">
-      <div class="col-sm-4"><strong>{{t common.components}}</strong></div>
-      <div class="col-sm-8"><strong>{{t wizard.step2.table.instances}}</strong></div>
-    </div>
-    {{#each component in groupedComponents}}
-      <div class="form-group">
-        <div class="col-sm-4 component-label">{{component.name}}</div>
-        <div class="col-sm-8">{{input value=component.count}}</div>
-      </div>
-    {{/each}}
-    {{#if groupedComponentsHaveErrors}}
-      <div class="alert alert-danger">
-        {{t sliderApp.flex.invalid_counts}}
-      </div>
-    {{/if}}
-  </form>
-</div>


[35/42] ambari git commit: AMBARI-21330.Remove slider view from Ambari-3.0.0(Venkata Sairam)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/data/apptypes/all_fields.json
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/data/apptypes/all_fields.json b/contrib/views/slider/src/main/resources/ui/app/assets/data/apptypes/all_fields.json
deleted file mode 100644
index 19e3479..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/data/apptypes/all_fields.json
+++ /dev/null
@@ -1,642 +0,0 @@
-{
-  "href" : "http://c6401:8080/api/v1/views/SLIDER/versions/1.0.0/instances/SLIDER_1/apptypes?fields=*",
-  "items" : [
-    {
-      "href" : "http://c6401:8080/api/v1/views/SLIDER/versions/1.0.0/instances/SLIDER_1/apptypes/ACCUMULO",
-      "id" : "ACCUMULO",
-      "instance_name" : "SLIDER_1",
-      "typeComponents" : [
-        {
-          "id" : "ACCUMULO_MASTER",
-          "name" : "ACCUMULO_MASTER",
-          "category" : "MASTER",
-          "displayName" : "ACCUMULO_MASTER",
-          "priority" : 1,
-          "instanceCount" : 0,
-          "maxInstanceCount" : 0,
-          "yarnMemory" : 1024,
-          "yarnCpuCores" : 1
-        },
-        {
-          "id" : "ACCUMULO_MONITOR",
-          "name" : "ACCUMULO_MONITOR",
-          "category" : "MASTER",
-          "displayName" : "ACCUMULO_MONITOR",
-          "priority" : 3,
-          "instanceCount" : 0,
-          "maxInstanceCount" : 0,
-          "yarnMemory" : 1024,
-          "yarnCpuCores" : 1
-        },
-        {
-          "id" : "ACCUMULO_GC",
-          "name" : "ACCUMULO_GC",
-          "category" : "MASTER",
-          "displayName" : "ACCUMULO_GC",
-          "priority" : 4,
-          "instanceCount" : 0,
-          "maxInstanceCount" : 0,
-          "yarnMemory" : 1024,
-          "yarnCpuCores" : 1
-        },
-        {
-          "id" : "ACCUMULO_TRACER",
-          "name" : "ACCUMULO_TRACER",
-          "category" : "MASTER",
-          "displayName" : "ACCUMULO_TRACER",
-          "priority" : 5,
-          "instanceCount" : 0,
-          "maxInstanceCount" : 0,
-          "yarnMemory" : 1024,
-          "yarnCpuCores" : 1
-        },
-        {
-          "id" : "ACCUMULO_TSERVER",
-          "name" : "ACCUMULO_TSERVER",
-          "category" : "SLAVE",
-          "displayName" : "ACCUMULO_TSERVER",
-          "priority" : 2,
-          "instanceCount" : 0,
-          "maxInstanceCount" : 0,
-          "yarnMemory" : 1024,
-          "yarnCpuCores" : 1
-        }
-      ],
-      "typeDescription" : "The Apache Accumulo sorted, distributed key/value store is a robust,\n        scalable, high performance data storage system that features cell-based\n        access control and customizable server-side processing. It is based on\n        Google's BigTable design and is built on top of Apache Hadoop,\n        Zookeeper, and Thrift.\n        Requirements:\n        1. Ensure parent dir for path (accumulo-site/instance.dfs.dir) is accessible to the App owner.",
-      "typeName" : "ACCUMULO",
-      "typePackageFileName" : "accumulo_v151.zip",
-      "typeVersion" : "1.5.1",
-      "version" : "1.0.0",
-      "view_name" : "SLIDER",
-      "typeConfigs" : {
-        "agent.conf" : "/slider/agent/conf/agent.ini",
-        "application.def" : "/slider/accumulo_v151.zip",
-        "config_types" : "accumulo-site",
-        "java_home" : "/usr/jdk64/jdk1.7.0_45",
-        "package_list" : "files/accumulo-1.5.1-bin.tar.gz",
-        "site.accumulo-site.gc.port.client" : "0",
-        "site.accumulo-site.general.classpaths" : "$ACCUMULO_HOME/lib/accumulo-server.jar,\n$ACCUMULO_HOME/lib/accumulo-core.jar,\n$ACCUMULO_HOME/lib/accumulo-start.jar,\n$ACCUMULO_HOME/lib/accumulo-fate.jar,\n$ACCUMULO_HOME/lib/accumulo-proxy.jar,\n$ACCUMULO_HOME/lib/[^.].*.jar,\n$ZOOKEEPER_HOME/zookeeper[^.].*.jar,\n$HADOOP_CONF_DIR,\n$HADOOP_PREFIX/[^.].*.jar,\n$HADOOP_PREFIX/lib/[^.].*.jar,\n$HADOOP_PREFIX/share/hadoop/common/.*.jar,\n$HADOOP_PREFIX/share/hadoop/common/lib/.*.jar,\n$HADOOP_PREFIX/share/hadoop/hdfs/.*.jar,\n$HADOOP_PREFIX/share/hadoop/mapreduce/.*.jar,\n$HADOOP_PREFIX/share/hadoop/yarn/.*.jar,\n/usr/lib/hadoop/.*.jar,\n/usr/lib/hadoop/lib/.*.jar,\n/usr/lib/hadoop-hdfs/.*.jar,\n/usr/lib/hadoop-mapreduce/.*.jar,\n/usr/lib/hadoop-yarn/.*.jar,",
-        "site.accumulo-site.instance.dfs.dir" : "/apps/accumulo/data",
-        "site.accumulo-site.instance.secret" : "DEFAULT",
-        "site.accumulo-site.instance.zookeeper.host" : "${ZK_HOST}",
-        "site.accumulo-site.master.port.client" : "0",
-        "site.accumulo-site.monitor.port.client" : "${ACCUMULO_MONITOR.ALLOCATED_PORT}",
-        "site.accumulo-site.monitor.port.log4j" : "0",
-        "site.accumulo-site.trace.port.client" : "0",
-        "site.accumulo-site.trace.token.property.password" : "secret",
-        "site.accumulo-site.trace.user" : "root",
-        "site.accumulo-site.tserver.cache.data.size" : "7M",
-        "site.accumulo-site.tserver.cache.index.size" : "20M",
-        "site.accumulo-site.tserver.memory.maps.max" : "80M",
-        "site.accumulo-site.tserver.port.client" : "0",
-        "site.accumulo-site.tserver.sort.buffer.size" : "50M",
-        "site.accumulo-site.tserver.walog.max.size" : "100M",
-        "site.global.accumulo_instance_name" : "instancename",
-        "site.global.accumulo_root_password" : "secret",
-        "site.global.app_install_dir" : "${AGENT_WORK_ROOT}/app/install",
-        "site.global.app_log_dir" : "${AGENT_LOG_ROOT}/app/log",
-        "site.global.app_pid_dir" : "${AGENT_WORK_ROOT}/app/run",
-        "site.global.app_root" : "${AGENT_WORK_ROOT}/app/install/accumulo-1.5.1",
-        "site.global.app_user" : "yarn",
-        "site.global.gc_heapsize" : "64m",
-        "site.global.hadoop_conf_dir" : "/etc/hadoop/conf",
-        "site.global.hadoop_prefix" : "/usr/lib/hadoop",
-        "site.global.master_heapsize" : "128m",
-        "site.global.monitor_heapsize" : "64m",
-        "site.global.other_heapsize" : "128m",
-        "site.global.security_enabled" : "false",
-        "site.global.tserver_heapsize" : "128m",
-        "site.global.user_group" : "hadoop",
-        "site.global.zookeeper_home" : "/usr/lib/zookeeper"
-      }
-    },
-    {
-      "href" : "http://162.216.148.58:8080/api/v1/views/SLIDER/versions/1.0.0/instances/SLIDER_1/apptypes/HBASE",
-      "id" : "HBASE",
-      "instance_name" : "SLIDER_1",
-      "typeComponents" : [
-        {
-          "id" : "HBASE_MASTER",
-          "name" : "HBASE_MASTER",
-          "category" : "MASTER",
-          "displayName" : "HBASE_MASTER",
-          "priority" : 1,
-          "instanceCount" : 1,
-          "maxInstanceCount" : 2,
-          "yarnMemory" : 1024,
-          "yarnCpuCores" : 1
-        },
-        {
-          "id" : "HBASE_REGIONSERVER",
-          "name" : "HBASE_REGIONSERVER",
-          "category" : "SLAVE",
-          "displayName" : "HBASE_REGIONSERVER",
-          "priority" : 2,
-          "instanceCount" : 1,
-          "maxInstanceCount" : 0,
-          "yarnMemory" : 1024,
-          "yarnCpuCores" : 1
-        }
-      ],
-      "typeDescription" : "Apache HBase is the Hadoop database, a distributed, scalable, big data store.\n        Requirements:\n        1. Ensure parent dir for path (hbase-site/hbase.rootdir) is accessible to the App owner.\n        2. Ensure ZK root (hbase-site/zookeeper.znode.parent) is unique for the App instance.",
-      "typeName" : "HBASE",
-      "typePackageFileName" : "hbase_v096.zip",
-      "typeVersion" : "0.96.0.2.1.1",
-      "version" : "1.0.0",
-      "view_name" : "SLIDER",
-      "gangliaMetrics" : {
-        "Component" : {
-          "HBASE_MASTER" : {
-            "ClusterId" : {
-              "metric" : "Hadoop:service=HBase,name=Master,sub=Server.tag.clusterId",
-              "pointInTime" : true,
-              "temporal" : false,
-              "keyName" : "Hadoop:service=HBase,name=Master,sub=Server",
-              "matchers" : [
-                [
-                  "tag",
-                  "clusterId"
-                ],
-                [
-                  "tag.clusterId"
-                ]
-              ]
-            },
-            "DeadRegionServers" : {
-              "metric" : "Hadoop:service=HBase,name=Master,sub=Server.numDeadRegionServers",
-              "pointInTime" : true,
-              "temporal" : false,
-              "keyName" : "Hadoop:service=HBase,name=Master,sub=Server",
-              "matchers" : [
-                [
-                  "numDeadRegionServers"
-                ]
-              ]
-            },
-            "IsActiveMaster" : {
-              "metric" : "Hadoop:service=HBase,name=Master,sub=Server.tag.isActiveMaster",
-              "pointInTime" : true,
-              "temporal" : false,
-              "keyName" : "Hadoop:service=HBase,name=Master,sub=Server",
-              "matchers" : [
-                [
-                  "tag",
-                  "isActiveMaster"
-                ],
-                [
-                  "tag.isActiveMaster"
-                ]
-              ]
-            },
-            "MasterActiveTime" : {
-              "metric" : "Hadoop:service=HBase,name=Master,sub=Server.masterActiveTime",
-              "pointInTime" : true,
-              "temporal" : false,
-              "keyName" : "Hadoop:service=HBase,name=Master,sub=Server",
-              "matchers" : [
-                [
-                  "masterActiveTime"
-                ]
-              ]
-            },
-            "MasterStartTime" : {
-              "metric" : "Hadoop:service=HBase,name=Master,sub=Server.masterStartTime",
-              "pointInTime" : true,
-              "temporal" : false,
-              "keyName" : "Hadoop:service=HBase,name=Master,sub=Server",
-              "matchers" : [
-                [
-                  "masterStartTime"
-                ]
-              ]
-            },
-            "RegionServers" : {
-              "metric" : "Hadoop:service=HBase,name=Master,sub=Server.numRegionServers",
-              "pointInTime" : true,
-              "temporal" : false,
-              "keyName" : "Hadoop:service=HBase,name=Master,sub=Server",
-              "matchers" : [
-                [
-                  "numRegionServers"
-                ]
-              ]
-            },
-            "ServerName" : {
-              "metric" : "Hadoop:service=HBase,name=Master,sub=Server.tag.serverName",
-              "pointInTime" : true,
-              "temporal" : false,
-              "keyName" : "Hadoop:service=HBase,name=Master,sub=Server",
-              "matchers" : [
-                [
-                  "tag",
-                  "serverName"
-                ],
-                [
-                  "tag.serverName"
-                ]
-              ]
-            },
-            "ZookeeperQuorum" : {
-              "metric" : "Hadoop:service=HBase,name=Master,sub=Server.tag.zookeeperQuorum",
-              "pointInTime" : true,
-              "temporal" : false,
-              "keyName" : "Hadoop:service=HBase,name=Master,sub=Server",
-              "matchers" : [
-                [
-                  "tag",
-                  "zookeeperQuorum"
-                ],
-                [
-                  "tag.zookeeperQuorum"
-                ]
-              ]
-            },
-            "cluster_requests" : {
-              "metric" : "Hadoop:service=HBase,name=Master,sub=Server.clusterRequests",
-              "pointInTime" : true,
-              "temporal" : false,
-              "keyName" : "Hadoop:service=HBase,name=Master,sub=Server",
-              "matchers" : [
-                [
-                  "clusterRequests"
-                ]
-              ]
-            },
-            "metricAverageLoad" : {
-              "metric" : "Hadoop:service=HBase,name=Master,sub=Server.averageLoad",
-              "pointInTime" : true,
-              "temporal" : false,
-              "keyName" : "Hadoop:service=HBase,name=Master,sub=Server",
-              "matchers" : [
-                [
-                  "averageLoad"
-                ]
-              ]
-            }
-          }
-        }
-      },
-      "jmxMetrics" : {
-        "Component" : {
-          "HBASE_MASTER" : {
-            "ClusterId" : {
-              "metric" : "Hadoop:service=HBase,name=Master,sub=Server.tag.clusterId",
-              "pointInTime" : true,
-              "temporal" : false,
-              "keyName" : "Hadoop:service=HBase,name=Master,sub=Server",
-              "matchers" : [
-                [
-                  "tag",
-                  "clusterId"
-                ],
-                [
-                  "tag.clusterId"
-                ]
-              ]
-            },
-            "DeadRegionServers" : {
-              "metric" : "Hadoop:service=HBase,name=Master,sub=Server.numDeadRegionServers",
-              "pointInTime" : true,
-              "temporal" : false,
-              "keyName" : "Hadoop:service=HBase,name=Master,sub=Server",
-              "matchers" : [
-                [
-                  "numDeadRegionServers"
-                ]
-              ]
-            },
-            "IsActiveMaster" : {
-              "metric" : "Hadoop:service=HBase,name=Master,sub=Server.tag.isActiveMaster",
-              "pointInTime" : true,
-              "temporal" : false,
-              "keyName" : "Hadoop:service=HBase,name=Master,sub=Server",
-              "matchers" : [
-                [
-                  "tag",
-                  "isActiveMaster"
-                ],
-                [
-                  "tag.isActiveMaster"
-                ]
-              ]
-            },
-            "MasterActiveTime" : {
-              "metric" : "Hadoop:service=HBase,name=Master,sub=Server.masterActiveTime",
-              "pointInTime" : true,
-              "temporal" : false,
-              "keyName" : "Hadoop:service=HBase,name=Master,sub=Server",
-              "matchers" : [
-                [
-                  "masterActiveTime"
-                ]
-              ]
-            },
-            "MasterStartTime" : {
-              "metric" : "Hadoop:service=HBase,name=Master,sub=Server.masterStartTime",
-              "pointInTime" : true,
-              "temporal" : false,
-              "keyName" : "Hadoop:service=HBase,name=Master,sub=Server",
-              "matchers" : [
-                [
-                  "masterStartTime"
-                ]
-              ]
-            },
-            "RegionServers" : {
-              "metric" : "Hadoop:service=HBase,name=Master,sub=Server.numRegionServers",
-              "pointInTime" : true,
-              "temporal" : false,
-              "keyName" : "Hadoop:service=HBase,name=Master,sub=Server",
-              "matchers" : [
-                [
-                  "numRegionServers"
-                ]
-              ]
-            },
-            "ServerName" : {
-              "metric" : "Hadoop:service=HBase,name=Master,sub=Server.tag.serverName",
-              "pointInTime" : true,
-              "temporal" : false,
-              "keyName" : "Hadoop:service=HBase,name=Master,sub=Server",
-              "matchers" : [
-                [
-                  "tag",
-                  "serverName"
-                ],
-                [
-                  "tag.serverName"
-                ]
-              ]
-            },
-            "ZookeeperQuorum" : {
-              "metric" : "Hadoop:service=HBase,name=Master,sub=Server.tag.zookeeperQuorum",
-              "pointInTime" : true,
-              "temporal" : false,
-              "keyName" : "Hadoop:service=HBase,name=Master,sub=Server",
-              "matchers" : [
-                [
-                  "tag",
-                  "zookeeperQuorum"
-                ],
-                [
-                  "tag.zookeeperQuorum"
-                ]
-              ]
-            },
-            "cluster_requests" : {
-              "metric" : "Hadoop:service=HBase,name=Master,sub=Server.clusterRequests",
-              "pointInTime" : true,
-              "temporal" : false,
-              "keyName" : "Hadoop:service=HBase,name=Master,sub=Server",
-              "matchers" : [
-                [
-                  "clusterRequests"
-                ]
-              ]
-            },
-            "metricAverageLoad" : {
-              "metric" : "Hadoop:service=HBase,name=Master,sub=Server.averageLoad",
-              "pointInTime" : true,
-              "temporal" : false,
-              "keyName" : "Hadoop:service=HBase,name=Master,sub=Server",
-              "matchers" : [
-                [
-                  "averageLoad"
-                ]
-              ]
-            }
-          }
-        }
-      },
-      "typeConfigs" : {
-        "agent.conf" : "/slider/agent/conf/agent.ini",
-        "application.def" : "/slider/hbase_v096.zip",
-        "config_types" : "core-site,hdfs-site,hbase-site",
-        "java_home" : "/usr/jdk64/jdk1.7.0_45",
-        "package_list" : "files/hbase-0.96.1-hadoop2-bin.tar.gz",
-        "site.core-site.fs.defaultFS" : "${NN_URI}",
-        "site.global.app_install_dir" : "${AGENT_WORK_ROOT}/app/install",
-        "site.global.app_log_dir" : "${AGENT_LOG_ROOT}/app/log",
-        "site.global.app_pid_dir" : "${AGENT_WORK_ROOT}/app/run",
-        "site.global.app_root" : "${AGENT_WORK_ROOT}/app/install/hbase-0.96.1-hadoop2",
-        "site.global.app_user" : "yarn",
-        "site.global.ganglia_server_host" : "${NN_HOST}",
-        "site.global.ganglia_server_id" : "Application1",
-        "site.global.ganglia_server_port" : "8667",
-        "site.global.hbase_master_heapsize" : "1024m",
-        "site.global.hbase_regionserver_heapsize" : "1024m",
-        "site.global.hbase_regionserver_xmn_size" : "512",
-        "site.global.hbase_regionserver_xmn_ratio" : "0.2",
-        "site.global.security_enabled" : "false",
-        "site.global.user_group" : "hadoop",
-        "site.hbase-site.hbase.client.keyvalue.maxsize" : "10485760",
-        "site.hbase-site.hbase.client.scanner.caching" : "100",
-        "site.hbase-site.hbase.cluster.distributed" : "true",
-        "site.hbase-site.hbase.defaults.for.version.skip" : "true",
-        "site.hbase-site.hbase.hregion.majorcompaction" : "86400000",
-        "site.hbase-site.hbase.hregion.max.filesize" : "10737418240",
-        "site.hbase-site.hbase.hregion.memstore.block.multiplier" : "2",
-        "site.hbase-site.hbase.hregion.memstore.flush.size" : "134217728",
-        "site.hbase-site.hbase.hregion.memstore.mslab.enabled" : "true",
-        "site.hbase-site.hbase.hstore.blockingStoreFiles" : "10",
-        "site.hbase-site.hbase.hstore.compactionThreshold" : "3",
-        "site.hbase-site.hbase.hstore.flush.retries.number" : "120",
-        "site.hbase-site.hbase.local.dir" : "${hbase.tmp.dir}/local",
-        "site.hbase-site.hbase.master.info.port" : "${HBASE_MASTER.ALLOCATED_PORT}",
-        "site.hbase-site.hbase.regionserver.global.memstore.lowerLimit" : "0.38",
-        "site.hbase-site.hbase.regionserver.global.memstore.upperLimit" : "0.4",
-        "site.hbase-site.hbase.regionserver.handler.count" : "60",
-        "site.hbase-site.hbase.regionserver.info.port" : "0",
-        "site.hbase-site.hbase.regionserver.port" : "0",
-        "site.hbase-site.hbase.rootdir" : "${NN_URI}/apps/hbase/data",
-        "site.hbase-site.hbase.security.authentication" : "simple",
-        "site.hbase-site.hbase.security.authorization" : "false",
-        "site.hbase-site.hbase.stagingdir" : "${NN_URI}/apps/hbase/staging",
-        "site.hbase-site.hbase.superuser" : "yarn",
-        "site.hbase-site.hbase.tmp.dir" : "${AGENT_WORK_ROOT}/work/app/tmp",
-        "site.hbase-site.hbase.zookeeper.property.clientPort" : "2181",
-        "site.hbase-site.hbase.zookeeper.quorum" : "${ZK_HOST}",
-        "site.hbase-site.hbase.zookeeper.useMulti" : "true",
-        "site.hbase-site.hfile.block.cache.size" : "0.40",
-        "site.hbase-site.zookeeper.session.timeout" : "30000",
-        "site.hbase-site.zookeeper.znode.parent" : "/hbase-unsecure",
-        "site.hdfs-site.dfs.namenode.http-address" : "${NN_HOST}:50070",
-        "site.hdfs-site.dfs.namenode.https-address" : "${NN_HOST}:50470"
-      }
-    },
-    {
-      "href" : "http://162.216.148.58:8080/api/v1/views/SLIDER/versions/1.0.0/instances/SLIDER_1/apptypes/STORM",
-      "gangliaMetrics" : null,
-      "id" : "STORM",
-      "instance_name" : "SLIDER_1",
-      "jmxMetrics" : null,
-      "typeComponents" : [
-        {
-          "id" : "NIMBUS",
-          "name" : "NIMBUS",
-          "category" : "MASTER",
-          "displayName" : "NIMBUS",
-          "priority" : 1,
-          "instanceCount" : 0,
-          "maxInstanceCount" : 0,
-          "yarnMemory" : 1024,
-          "yarnCpuCores" : 1
-        },
-        {
-          "id" : "STORM_REST_API",
-          "name" : "STORM_REST_API",
-          "category" : "MASTER",
-          "displayName" : "STORM_REST_API",
-          "priority" : 2,
-          "instanceCount" : 0,
-          "maxInstanceCount" : 0,
-          "yarnMemory" : 1024,
-          "yarnCpuCores" : 1
-        },
-        {
-          "id" : "SUPERVISOR",
-          "name" : "SUPERVISOR",
-          "category" : "SLAVE",
-          "displayName" : "SUPERVISOR",
-          "priority" : 5,
-          "instanceCount" : 0,
-          "maxInstanceCount" : 0,
-          "yarnMemory" : 1024,
-          "yarnCpuCores" : 1
-        },
-        {
-          "id" : "STORM_UI_SERVER",
-          "name" : "STORM_UI_SERVER",
-          "category" : "MASTER",
-          "displayName" : "STORM_UI_SERVER",
-          "priority" : 3,
-          "instanceCount" : 0,
-          "maxInstanceCount" : 0,
-          "yarnMemory" : 1024,
-          "yarnCpuCores" : 1
-        },
-        {
-          "id" : "DRPC_SERVER",
-          "name" : "DRPC_SERVER",
-          "category" : "MASTER",
-          "displayName" : "DRPC_SERVER",
-          "priority" : 4,
-          "instanceCount" : 0,
-          "maxInstanceCount" : 0,
-          "yarnMemory" : 1024,
-          "yarnCpuCores" : 1
-        }
-      ],
-      "typeDescription" : "Apache Hadoop Stream processing framework",
-      "typeName" : "STORM",
-      "typePackageFileName" : "storm_v091.zip",
-      "typeVersion" : "0.9.1.2.1",
-      "version" : "1.0.0",
-      "view_name" : "SLIDER",
-      "typeConfigs" : {
-        "agent.conf" : "/slider/agent/conf/agent.ini",
-        "application.def" : "/slider/storm_v091.zip",
-        "config_types" : "storm-site",
-        "java_home" : "/usr/jdk64/jdk1.7.0_45",
-        "package_list" : "files/apache-storm-0.9.1.2.1.1.0-237.tar.gz",
-        "site.global.app_root" : "${AGENT_WORK_ROOT}/app/install/apache-storm-0.9.1.2.1.1.0-237",
-        "site.global.app_user" : "yarn",
-        "site.global.ganglia_server_host" : "${NN_HOST}",
-        "site.global.ganglia_server_id" : "Application2",
-        "site.global.rest_api_admin_port" : "${STORM_REST_API.ALLOCATED_PORT}",
-        "site.global.rest_api_port" : "${STORM_REST_API.ALLOCATED_PORT}",
-        "site.global.security_enabled" : "false",
-        "site.global.user_group" : "hadoop",
-        "site.storm-site.dev.zookeeper.path" : "${AGENT_WORK_ROOT}/app/tmp/dev-storm-zookeeper",
-        "site.storm-site.drpc.childopts" : "-Xmx768m",
-        "site.storm-site.drpc.invocations.port" : "${DRPC_SERVER.ALLOCATED_PORT}",
-        "site.storm-site.drpc.port" : "${DRPC_SERVER.ALLOCATED_PORT}",
-        "site.storm-site.drpc.queue.size" : "128",
-        "site.storm-site.drpc.request.timeout.secs" : "600",
-        "site.storm-site.drpc.worker.threads" : "64",
-        "site.storm-site.java.library.path" : "/usr/local/lib:/opt/local/lib:/usr/lib",
-        "site.storm-site.logviewer.appender.name" : "A1",
-        "site.storm-site.logviewer.childopts" : "-Xmx128m",
-        "site.storm-site.logviewer.port" : "${SUPERVISOR.ALLOCATED_PORT}",
-        "site.storm-site.nimbus.childopts" : "-Xmx1024m -Djava.security.auth.login.config=/etc/storm/storm_jaas.conf -javaagent:${AGENT_WORK_ROOT}/app/install/apache-storm-0.9.1.2.1.1.0-237/contrib/storm-jmxetric/lib/jmxetric-1.0.4.jar=host={0},port=8669,wireformat31x=true,mode=multicast,config=${AGENT_WORK_ROOT}/app/install/apache-storm-0.9.1.2.1.1.0-237/contrib/storm-jmxetric/conf/jmxetric-conf.xml,process=Nimbus_JVM",
-        "site.storm-site.nimbus.cleanup.inbox.freq.secs" : "600",
-        "site.storm-site.nimbus.file.copy.expiration.secs" : "600",
-        "site.storm-site.nimbus.host" : "${NIMBUS_HOST}",
-        "site.storm-site.nimbus.inbox.jar.expiration.secs" : "3600",
-        "site.storm-site.nimbus.monitor.freq.secs" : "10",
-        "site.storm-site.nimbus.reassign" : "true",
-        "site.storm-site.nimbus.supervisor.timeout.secs" : "60",
-        "site.storm-site.nimbus.task.launch.secs" : "120",
-        "site.storm-site.nimbus.task.timeout.secs" : "30",
-        "site.storm-site.nimbus.thrift.max_buffer_size" : "1048576",
-        "site.storm-site.nimbus.thrift.port" : "${NIMBUS.ALLOCATED_PORT}",
-        "site.storm-site.nimbus.topology.validator" : "backtype.storm.nimbus.DefaultTopologyValidator",
-        "site.storm-site.storm.cluster.mode" : "distributed",
-        "site.storm-site.storm.local.dir" : "${AGENT_WORK_ROOT}/app/tmp/storm",
-        "site.storm-site.storm.local.mode.zmq" : "false",
-        "site.storm-site.storm.messaging.netty.buffer_size" : "5242880",
-        "site.storm-site.storm.messaging.netty.client_worker_threads" : "1",
-        "site.storm-site.storm.messaging.netty.max_retries" : "30",
-        "site.storm-site.storm.messaging.netty.max_wait_ms" : "1000",
-        "site.storm-site.storm.messaging.netty.min_wait_ms" : "100",
-        "site.storm-site.storm.messaging.netty.server_worker_threads" : "1",
-        "site.storm-site.storm.messaging.transport" : "backtype.storm.messaging.netty.Context",
-        "site.storm-site.storm.thrift.transport" : "backtype.storm.security.auth.SimpleTransportPlugin",
-        "site.storm-site.storm.zookeeper.connection.timeout" : "15000",
-        "site.storm-site.storm.zookeeper.port" : "2181",
-        "site.storm-site.storm.zookeeper.retry.interval" : "1000",
-        "site.storm-site.storm.zookeeper.retry.intervalceiling.millis" : "30000",
-        "site.storm-site.storm.zookeeper.retry.times" : "5",
-        "site.storm-site.storm.zookeeper.root" : "/storm",
-        "site.storm-site.storm.zookeeper.servers" : "['${ZK_HOST}']",
-        "site.storm-site.storm.zookeeper.session.timeout" : "20000",
-        "site.storm-site.supervisor.childopts" : "-Xmx256m -Djava.security.auth.login.config=/etc/storm/storm_jaas.conf -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=${SUPERVISOR.ALLOCATED_PORT} -javaagent:${AGENT_WORK_ROOT}/app/install/apache-storm-0.9.1.2.1.1.0-237/contrib/storm-jmxetric/lib/jmxetric-1.0.4.jar=host={0},port=8669,wireformat31x=true,mode=multicast,config=${AGENT_WORK_ROOT}/app/install/apache-storm-0.9.1.2.1.1.0-237/contrib/storm-jmxetric/conf/jmxetric-conf.xml,process=Supervisor_JVM",
-        "site.storm-site.supervisor.enable" : "true",
-        "site.storm-site.supervisor.heartbeat.frequency.secs" : "5",
-        "site.storm-site.supervisor.monitor.frequency.secs" : "3",
-        "site.storm-site.supervisor.slots.ports" : "[${SUPERVISOR.ALLOCATED_PORT}, ${SUPERVISOR.ALLOCATED_PORT}]",
-        "site.storm-site.supervisor.worker.start.timeout.secs" : "120",
-        "site.storm-site.supervisor.worker.timeout.secs" : "30",
-        "site.storm-site.task.heartbeat.frequency.secs" : "3",
-        "site.storm-site.task.refresh.poll.secs" : "10",
-        "site.storm-site.topology.acker.executors" : "null",
-        "site.storm-site.topology.builtin.metrics.bucket.size.secs" : "60",
-        "site.storm-site.topology.debug" : "false",
-        "site.storm-site.topology.disruptor.wait.strategy" : "com.lmax.disruptor.BlockingWaitStrategy",
-        "site.storm-site.topology.enable.message.timeouts" : "true",
-        "site.storm-site.topology.error.throttle.interval.secs" : "10",
-        "site.storm-site.topology.executor.receive.buffer.size" : "1024",
-        "site.storm-site.topology.executor.send.buffer.size" : "1024",
-        "site.storm-site.topology.fall.back.on.java.serialization" : "true",
-        "site.storm-site.topology.kryo.factory" : "backtype.storm.serialization.DefaultKryoFactory",
-        "site.storm-site.topology.max.error.report.per.interval" : "5",
-        "site.storm-site.topology.max.spout.pending" : "null",
-        "site.storm-site.topology.max.task.parallelism" : "null",
-        "site.storm-site.topology.message.timeout.secs" : "30",
-        "site.storm-site.topology.optimize" : "true",
-        "site.storm-site.topology.receiver.buffer.size" : "8",
-        "site.storm-site.topology.skip.missing.kryo.registrations" : "false",
-        "site.storm-site.topology.sleep.spout.wait.strategy.time.ms" : "1",
-        "site.storm-site.topology.spout.wait.strategy" : "backtype.storm.spout.SleepSpoutWaitStrategy",
-        "site.storm-site.topology.state.synchronization.timeout.secs" : "60",
-        "site.storm-site.topology.stats.sample.rate" : "0.05",
-        "site.storm-site.topology.tick.tuple.freq.secs" : "null",
-        "site.storm-site.topology.transfer.buffer.size" : "1024",
-        "site.storm-site.topology.trident.batch.emit.interval.millis" : "500",
-        "site.storm-site.topology.tuple.serializer" : "backtype.storm.serialization.types.ListDelegateSerializer",
-        "site.storm-site.topology.worker.childopts" : "null",
-        "site.storm-site.topology.worker.shared.thread.pool.size" : "4",
-        "site.storm-site.topology.workers" : "1",
-        "site.storm-site.transactional.zookeeper.port" : "null",
-        "site.storm-site.transactional.zookeeper.root" : "/transactional",
-        "site.storm-site.transactional.zookeeper.servers" : "null",
-        "site.storm-site.ui.port" : "${STORM_UI_SERVER.ALLOCATED_PORT}",
-        "site.storm-site.worker.childopts" : "-Xmx768m -javaagent:${AGENT_WORK_ROOT}/app/install/apache-storm-0.9.1.2.1.1.0-237/contrib/storm-jmxetric/lib/jmxetric-1.0.4.jar=host={0},port=8669,wireformat31x=true,mode=multicast,config=${AGENT_WORK_ROOT}/app/install/apache-storm-0.9.1.2.1.1.0-237/contrib/storm-jmxetric/conf/jmxetric-conf.xml,process=Worker_%ID%_JVM",
-        "site.storm-site.worker.heartbeat.frequency.secs" : "1",
-        "site.storm-site.zmq.hwm" : "0",
-        "site.storm-site.zmq.linger.millis" : "5000",
-        "site.storm-site.zmq.threads" : "1"
-      }
-    }
-  ]
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/app/assets/data/metrics/metric.json
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/assets/data/metrics/metric.json b/contrib/views/slider/src/main/resources/ui/app/assets/data/metrics/metric.json
deleted file mode 100644
index 3f215f9..0000000
--- a/contrib/views/slider/src/main/resources/ui/app/assets/data/metrics/metric.json
+++ /dev/null
@@ -1,946 +0,0 @@
-{
-  "metrics" : {
-    "firstMetric" : [
-      [
-        5.0,
-        1401351555
-      ],
-      [
-        5.0,
-        1401351570
-      ],
-      [
-        5.0,
-        1401351585
-      ],
-      [
-        5.0,
-        1401351600
-      ],
-      [
-        5.0,
-        1401351615
-      ],
-      [
-        5.0,
-        1401351630
-      ],
-      [
-        5.0,
-        1401351645
-      ],
-      [
-        5.0,
-        1401351660
-      ],
-      [
-        5.0,
-        1401351675
-      ],
-      [
-        5.0,
-        1401351690
-      ],
-      [
-        5.0,
-        1401351705
-      ],
-      [
-        5.0,
-        1401351720
-      ],
-      [
-        5.0,
-        1401351735
-      ],
-      [
-        5.0,
-        1401351750
-      ],
-      [
-        5.0,
-        1401351765
-      ],
-      [
-        5.0,
-        1401351780
-      ],
-      [
-        5.0,
-        1401351795
-      ],
-      [
-        5.0,
-        1401351810
-      ],
-      [
-        5.0,
-        1401351825
-      ],
-      [
-        5.0,
-        1401351840
-      ],
-      [
-        5.0,
-        1401351855
-      ],
-      [
-        5.0,
-        1401351870
-      ],
-      [
-        5.0,
-        1401351885
-      ],
-      [
-        5.0,
-        1401351900
-      ],
-      [
-        5.0,
-        1401351915
-      ],
-      [
-        5.0,
-        1401351930
-      ],
-      [
-        5.0,
-        1401351945
-      ],
-      [
-        5.0,
-        1401351960
-      ],
-      [
-        5.0,
-        1401351975
-      ],
-      [
-        5.0,
-        1401351990
-      ],
-      [
-        5.0,
-        1401352005
-      ],
-      [
-        5.0,
-        1401352020
-      ],
-      [
-        5.0,
-        1401352035
-      ],
-      [
-        5.0,
-        1401352050
-      ],
-      [
-        5.0,
-        1401352065
-      ],
-      [
-        5.0,
-        1401352080
-      ],
-      [
-        5.0,
-        1401352095
-      ],
-      [
-        5.0,
-        1401352110
-      ],
-      [
-        5.0,
-        1401352125
-      ],
-      [
-        5.0,
-        1401352140
-      ],
-      [
-        5.0,
-        1401352155
-      ],
-      [
-        5.0,
-        1401352170
-      ],
-      [
-        5.0,
-        1401352185
-      ],
-      [
-        5.0,
-        1401352200
-      ],
-      [
-        5.0,
-        1401352215
-      ],
-      [
-        5.0,
-        1401352230
-      ],
-      [
-        5.0,
-        1401352245
-      ],
-      [
-        5.0,
-        1401352260
-      ],
-      [
-        5.0,
-        1401352275
-      ],
-      [
-        5.0,
-        1401352290
-      ],
-      [
-        5.0,
-        1401352305
-      ],
-      [
-        5.0,
-        1401352320
-      ],
-      [
-        5.0,
-        1401352335
-      ],
-      [
-        5.0,
-        1401352350
-      ],
-      [
-        5.0,
-        1401352365
-      ],
-      [
-        5.0,
-        1401352380
-      ],
-      [
-        5.0,
-        1401352395
-      ],
-      [
-        5.0,
-        1401352410
-      ],
-      [
-        5.0,
-        1401352425
-      ],
-      [
-        5.0,
-        1401352440
-      ],
-      [
-        5.0,
-        1401352455
-      ],
-      [
-        5.0,
-        1401352470
-      ],
-      [
-        5.0,
-        1401352485
-      ],
-      [
-        5.0,
-        1401352500
-      ],
-      [
-        5.0,
-        1401352515
-      ],
-      [
-        5.0,
-        1401352530
-      ],
-      [
-        5.0,
-        1401352545
-      ],
-      [
-        5.0,
-        1401352560
-      ],
-      [
-        5.0,
-        1401352575
-      ],
-      [
-        5.0,
-        1401352590
-      ],
-      [
-        5.0,
-        1401352605
-      ],
-      [
-        5.0,
-        1401352620
-      ],
-      [
-        5.0,
-        1401352635
-      ],
-      [
-        5.0,
-        1401352650
-      ],
-      [
-        5.0,
-        1401352665
-      ],
-      [
-        5.0,
-        1401352680
-      ],
-      [
-        5.0,
-        1401352695
-      ],
-      [
-        5.0,
-        1401352710
-      ],
-      [
-        5.0,
-        1401352725
-      ],
-      [
-        5.0,
-        1401352740
-      ],
-      [
-        5.0,
-        1401352755
-      ],
-      [
-        5.0,
-        1401352770
-      ],
-      [
-        5.0,
-        1401352785
-      ],
-      [
-        5.0,
-        1401352800
-      ],
-      [
-        5.0,
-        1401352815
-      ],
-      [
-        5.0,
-        1401352830
-      ],
-      [
-        5.0,
-        1401352845
-      ],
-      [
-        5.0,
-        1401352860
-      ],
-      [
-        5.0,
-        1401352875
-      ],
-      [
-        5.0,
-        1401352890
-      ],
-      [
-        5.0,
-        1401352905
-      ],
-      [
-        5.0,
-        1401352920
-      ],
-      [
-        5.0,
-        1401352935
-      ],
-      [
-        5.0,
-        1401352950
-      ],
-      [
-        5.0,
-        1401352965
-      ],
-      [
-        5.0,
-        1401352980
-      ],
-      [
-        5.0,
-        1401352995
-      ],
-      [
-        5.0,
-        1401353010
-      ],
-      [
-        5.0,
-        1401353025
-      ],
-      [
-        5.0,
-        1401353040
-      ],
-      [
-        5.0,
-        1401353055
-      ],
-      [
-        5.0,
-        1401353070
-      ],
-      [
-        5.0,
-        1401353085
-      ],
-      [
-        5.0,
-        1401353100
-      ],
-      [
-        5.0,
-        1401353115
-      ],
-      [
-        5.0,
-        1401353130
-      ],
-      [
-        5.0,
-        1401353145
-      ],
-      [
-        5.0,
-        1401353160
-      ],
-      [
-        5.0,
-        1401353175
-      ],
-      [
-        5.0,
-        1401353190
-      ],
-      [
-        5.0,
-        1401353205
-      ],
-      [
-        5.0,
-        1401353220
-      ],
-      [
-        5.0,
-        1401353235
-      ],
-      [
-        5.0,
-        1401353250
-      ],
-      [
-        5.0,
-        1401353265
-      ],
-      [
-        5.0,
-        1401353280
-      ],
-      [
-        5.0,
-        1401353295
-      ],
-      [
-        5.0,
-        1401353310
-      ],
-      [
-        5.0,
-        1401353325
-      ],
-      [
-        5.0,
-        1401353340
-      ],
-      [
-        5.0,
-        1401353355
-      ],
-      [
-        5.0,
-        1401353370
-      ],
-      [
-        5.0,
-        1401353385
-      ],
-      [
-        5.0,
-        1401353400
-      ],
-      [
-        5.0,
-        1401353415
-      ],
-      [
-        5.0,
-        1401353430
-      ],
-      [
-        5.0,
-        1401353445
-      ],
-      [
-        5.0,
-        1401353460
-      ],
-      [
-        5.0,
-        1401353475
-      ],
-      [
-        5.0,
-        1401353490
-      ],
-      [
-        5.0,
-        1401353505
-      ],
-      [
-        5.0,
-        1401353520
-      ],
-      [
-        5.0,
-        1401353535
-      ],
-      [
-        5.0,
-        1401353550
-      ],
-      [
-        5.0,
-        1401353565
-      ],
-      [
-        5.0,
-        1401353580
-      ],
-      [
-        5.0,
-        1401353595
-      ],
-      [
-        5.0,
-        1401353610
-      ],
-      [
-        5.0,
-        1401353625
-      ],
-      [
-        5.0,
-        1401353640
-      ],
-      [
-        5.0,
-        1401353655
-      ],
-      [
-        5.0,
-        1401353670
-      ],
-      [
-        5.0,
-        1401353685
-      ],
-      [
-        5.0,
-        1401353700
-      ],
-      [
-        5.0,
-        1401353715
-      ],
-      [
-        5.0,
-        1401353730
-      ],
-      [
-        5.0,
-        1401353745
-      ],
-      [
-        5.0,
-        1401353760
-      ],
-      [
-        5.0,
-        1401353775
-      ],
-      [
-        5.0,
-        1401353790
-      ],
-      [
-        5.0,
-        1401353805
-      ],
-      [
-        5.0,
-        1401353820
-      ],
-      [
-        5.0,
-        1401353835
-      ],
-      [
-        5.0,
-        1401353850
-      ],
-      [
-        5.0,
-        1401353865
-      ],
-      [
-        5.0,
-        1401353880
-      ],
-      [
-        5.0,
-        1401353895
-      ],
-      [
-        5.0,
-        1401353910
-      ],
-      [
-        5.0,
-        1401353925
-      ],
-      [
-        5.0,
-        1401353940
-      ],
-      [
-        5.0,
-        1401353955
-      ],
-      [
-        5.0,
-        1401353970
-      ],
-      [
-        5.0,
-        1401353985
-      ],
-      [
-        5.0,
-        1401354000
-      ],
-      [
-        5.0,
-        1401354015
-      ],
-      [
-        5.0,
-        1401354030
-      ],
-      [
-        5.0,
-        1401354045
-      ],
-      [
-        5.0,
-        1401354060
-      ],
-      [
-        5.0,
-        1401354075
-      ],
-      [
-        5.0,
-        1401354090
-      ],
-      [
-        5.0,
-        1401354105
-      ],
-      [
-        5.0,
-        1401354120
-      ],
-      [
-        5.0,
-        1401354135
-      ],
-      [
-        5.0,
-        1401354150
-      ],
-      [
-        5.0,
-        1401354165
-      ],
-      [
-        5.0,
-        1401354180
-      ],
-      [
-        5.0,
-        1401354195
-      ],
-      [
-        5.0,
-        1401354210
-      ],
-      [
-        5.0,
-        1401354225
-      ],
-      [
-        5.0,
-        1401354240
-      ],
-      [
-        5.0,
-        1401354255
-      ],
-      [
-        5.0,
-        1401354270
-      ],
-      [
-        5.0,
-        1401354285
-      ],
-      [
-        5.0,
-        1401354300
-      ],
-      [
-        5.0,
-        1401354315
-      ],
-      [
-        5.0,
-        1401354330
-      ],
-      [
-        5.0,
-        1401354345
-      ],
-      [
-        5.0,
-        1401354360
-      ],
-      [
-        5.0,
-        1401354375
-      ],
-      [
-        5.0,
-        1401354390
-      ],
-      [
-        5.0,
-        1401354405
-      ],
-      [
-        5.0,
-        1401354420
-      ],
-      [
-        5.0,
-        1401354435
-      ],
-      [
-        5.0,
-        1401354450
-      ],
-      [
-        5.0,
-        1401354465
-      ],
-      [
-        5.0,
-        1401354480
-      ],
-      [
-        5.0,
-        1401354495
-      ],
-      [
-        5.0,
-        1401354510
-      ],
-      [
-        5.0,
-        1401354525
-      ],
-      [
-        5.0,
-        1401354540
-      ],
-      [
-        5.0,
-        1401354555
-      ],
-      [
-        5.0,
-        1401354570
-      ],
-      [
-        5.0,
-        1401354585
-      ],
-      [
-        5.0,
-        1401354600
-      ],
-      [
-        5.0,
-        1401354615
-      ],
-      [
-        5.0,
-        1401354630
-      ],
-      [
-        5.0,
-        1401354645
-      ],
-      [
-        5.0,
-        1401354660
-      ],
-      [
-        5.0,
-        1401354675
-      ],
-      [
-        5.0,
-        1401354690
-      ],
-      [
-        5.0,
-        1401354705
-      ],
-      [
-        5.0,
-        1401354720
-      ],
-      [
-        5.0,
-        1401354735
-      ],
-      [
-        5.0,
-        1401354750
-      ],
-      [
-        5.0,
-        1401354765
-      ],
-      [
-        5.0,
-        1401354780
-      ],
-      [
-        5.0,
-        1401354795
-      ],
-      [
-        5.0,
-        1401354810
-      ],
-      [
-        5.0,
-        1401354825
-      ],
-      [
-        5.0,
-        1401354840
-      ],
-      [
-        5.0,
-        1401354855
-      ],
-      [
-        5.0,
-        1401354870
-      ],
-      [
-        5.0,
-        1401354885
-      ],
-      [
-        5.0,
-        1401354900
-      ],
-      [
-        5.0,
-        1401354915
-      ],
-      [
-        5.0,
-        1401354930
-      ],
-      [
-        5.0,
-        1401354945
-      ],
-      [
-        5.0,
-        1401354960
-      ],
-      [
-        5.0,
-        1401354975
-      ],
-      [
-        5.0,
-        1401354990
-      ],
-      [
-        5.0,
-        1401355005
-      ],
-      [
-        5.0,
-        1401355020
-      ],
-      [
-        5.0,
-        1401355035
-      ],
-      [
-        5.0,
-        1401355050
-      ],
-      [
-        5.0,
-        1401355065
-      ]
-    ]
-  }
-}
\ No newline at end of file